日期:2014-05-18  浏览次数:20474 次

Update Set .. Select .. 怎么实现我的要求
我现有两个表A,B

A 表的结构
ID, Column1,column2,column3,....., version

B表的结构
ID, Column4,column5,column6,...,XVersion

注释:
A.Version int 
B.Xversion int 
判断B 表中与A表相同的条件是: A.columN1=B.column4 and A.Column2=B.Column5 and A.Column3=B.Column6

我想将B表中与A表相同的记录(但Version不同 eg: A.Version != B.Xversion), 在A表中更新(只更新Version)
,将B.Xversion 更新到A表中对应的 version
更新version 还有一个原则就是: B.Xversion>A.version 更新, 否则不更新

用 update set ... select ... 如何写sql 









------解决方案--------------------
SQL code
update B set B.XVersion=A.Version where exists(select 1 from A where A.columN1=B.column4   and   A.Column2=B.Column5   and   A.Column3=B.Column6 and A.Version!=B.Xversion)

------解决方案--------------------
SQL code
update A
set A.version=B.xversion
from A join B on A.columN1=B.column4   and   A.Column2=B.Column5   and   A.Column3=B.Column6
where B.xversion>A.version

------解决方案--------------------
update a 
set a.version=b.xversion from a left join b on
A.columN1=B.column4 and A.Column2=B.Column5 and A.Column3=B.Column6 
where B.xversion>A.version
------解决方案--------------------
SQL code
UPDATE a SET version=ISNULL(xversion,version)
    FROM tA a
LEFT JOION tb b
    ON a.c1=b.c4 AND a.c2=b.c5 AND a.c3=b.c6 AND xversion>version

------解决方案--------------------
应该用内连,找不到就不更新.我用左连多操作了一些记录.虽然结果一样,但是多操作了记录.
就像2,3楼写的那样就可以了.