请教一个SQL语句

[复制链接]
查看11 | 回复9 | 2009-7-22 09:30:00 | 显示全部楼层 |阅读模式
现在有A,B两个表,A中有字段a,c,B中有字段b,c,当A.c=B.c时,需要更新A.a=B.b
请问此SQL语句应该如何写?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
update A
set a = (select b from B where B.c = A.c);
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 zxqsharp 于 2008-10-31 18:27 发表
update A
set a = (select b from B where B.c = A.c);

这样写的意思是对A表进行全表update,那么没有匹配上的,则把原来的A表中的a列置null,所以要加上条件:
update a set a.a=(select b.b from b where a.c=b.c) where a.a not in(select a.a from a where not exists(select 1 from b where a.c=b.c));
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
以前看过君三思也做过同样的题目
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
那这么写岂不是更简单?
update a set a.a=(select b.b from b where a.c=b.c)
where a.a exists (select b from a,b where a.c=b.c)
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 alex613501 于 2008-11-1 21:52 发表
那这么写岂不是更简单?
update a set a.a=(select b.b from b where a.c=b.c)
where a.a exists (select b from a,b where a.c=b.c)

正解~这种方法是目前最简单的一种。
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
UPDATE a SET a.a=(select b.b from b where a.c=b.c)
whereEXISTS(select b from a,b where a.c=b.c)
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
注意exists是不可以少得
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 serapy 于 2008-11-2 13:38 发表
UPDATE a SET a.a=(select b.b from b where a.c=b.c)
whereEXISTS(select b from a,b where a.c=b.c)


这才是正解!
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
学习了,都是高手啊。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行