sqlserver 将一个表中的某些字段更新到另一个表中
一、Oralce和DB2都支持的语法:
UPDATE A
SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
二、MS SQL Server不支持这样的语法,相对应的写法为:
方式一:
UPDATE A
SET A1 = B1, A2 = B2, A3 = B3
FROM A LEFT JOIN B ON A.ID = B.ID
此处也可以 right join 、 inner join
方式二:
UPDATE A
SET A1 = B1, A2 = B2, A3 = B3
FROM A, B WHERE A.ID = B.ID
update #temp2 set aDataSum=b.aData1+b.aData2 from #temp2 b where b.DepNumber=DepNumber
update #temp2 set aDataSum=b.aData1+b.aData2 from #temp2 ,#temp2 b where b.DepNumber=#temp2 ,DepNumber
三、Oracle和DB2中的写法
UPDATE A
SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)
注:如果要更新的表A数据量过大,而且仅更新表A的部分数据,那么,需要在前面的语句中加入where筛选要操作的数据。
四、案例:
公司做的业务有个需求是将A表中的某些字段数据,更新到B表中的相应含义的字段中。
假设user、score表的字段如下:
user表
userId username password sex addr phone
1 张珊 123 男 北京市 1562356586
2 李思 456 女 北京市 1562354256
3 王武 789 男 北京市 1562345544
4 王柳 113 男 北京市 1562445778
score表
scoreId userId username score course phone
1 1 80 语文
2 1 85 数学
3 3 52 语文
4 2 67 数学
现在score表中的username和phone字段是空的,需要从user表中,查找出相应的值插入score表中,SQL语句如下:
update score
set score.username=user.username,score.phone=user.phone
from score,user
where score.userId=user.userId