当前位置:主页>仓库管理软件> 列表

请教大家一个SQL的写法 找个人财务管理软件

记账软件版1楼: sql 用的时间不短了,可是只过写一些功能很简单的sql语句,稍微复杂点的就有问题

有这么个要求


表1表1结构如下

表 1
字段 A B C

表 2
字段 A B C E F G



根据表1的内容来对表二进行更新


更新原则如下
若 表1.A= 表2.A 表1.B=表2.B 且表2.C不为空 则不做任何操作
若 表1.A= 表2.A 表1.B=表2.B 且表2.C为空 则赋值 表2.C=表1.C
若以下三种情况
表1.A=表2.A 且 表1.B<>表2.B
表1.A<>表2.A 且 表1.B=表2.B
表1.A<>表2.A 且 表1.B<>表2.B
则视为纪录不存在
在 表2中添加新纪录 ,且令 表2.A= 表1.A 表2.B=表1.B 表2.C=表1.C

整个操作在SQL SERVER2000中进行

就是这样一个更新的问题 ,
我觉得可能一条SQL语句不可能完成这个功能 ,要是能一个语句完成当然最好
所以分多个语句来完成也可以

下面是我的写法

UPDATE 表2 SET 表2.C =表1.C WHERE (表2.A=表1.A) and (表1.B=表1.B) AND 表2.C IS NULL
GO
DELETE FROM 表1 WHERE (表2.A=表1.A) and (表1.B=表1.B)

GO
INSERT INTO 表2 (A,B,C) (SELECT * FROM 表1)
GO


这样是有问题的, 在查询分析器里都通不过 ,有人说跨表查询需要JOIN, 有人说需要使用游标 ,鼓捣了半天也没结果 难道非得一条条遍历才行么?

这问题可能大家都遇到过, 可以说是会者不难,我以前都是用两个QUERY循环遍历的,可这次要求只能用SQL脚本实现,我隐约觉得SQL肯定能解决这个问题,可就是摸不着头绪

200分奉上, 只有请大家帮忙了

到底这个语句该怎样写呢
.

2楼: update 没问题吧
insert into 表2(a,b,c) select a,b,c from 表1 where 表1.a<> 表2.a or 表1.b<> 表2.b 如个人财务管理软件

3楼: to anso :
表1 表2 都在data库中 ,可这样的语句无法通过

use data
UPDATE 表2 SET 表2.C =表1.C WHERE (表2.A=表1.A) and (表1.B=表1.B) AND 表2.C IS NULL
报错误是 服务器: 消息 107,级别 16,状态 3,行 1
列前缀 ''表1'' 与查询中所用的表名或别名不匹配。
服务器: 消息 107,级别 16,状态 1,行 1
列前缀 ''表1'' 与查询中所用的表名或别名不匹配。
服务器: 消息 107,级别 16,状态 1,行 1
列前缀 ''表1'' 与查询中所用的表名或别名不匹配。

是不是要把表1的数据也选出来才行阿?

4楼: UPDATE 表2 SET 表2.C =表1.C WHERE (表2.A=表1.A) and [b](表1.B=表1.B)[/b] AND 表2.C IS NULL
(表1.B=表1.B) --->(表2.B=表1.B)

5楼: UPDATE 表2 SET 表2.C =表1.C WHERE (表2.A=表1.A) and (表1.B=表1.B) AND 表2.C IS NULL
这一条更新语句不是相当于没做嘛
下面又把它删除掉了

6楼: 先做 在 表2中添加新纪录
再做 更新

记账软件版7楼: 1.更新
update 表2 set 表2.c = 表1.c from 表2,表1 where 表1.a=表2.a
and 表1.b=表2.b and 表2.c = ''''
在SQL SERVER 2000下测试过了没有问题。

插入自己写吧。。

8楼: 按xinxinhg的做了, 原来FROM后面要把涉及到的表都选出来
原来的做法在逻辑上有问题, 多亏RENYI 和杯中水的提醒
谢谢大家