我现有两个表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 Aset A.version=B.xversionfrom A join B on A.columN1=B.column4 and A.Column2=B.Column5 and A.Column3=B.Column6where 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 aLEFT JOION tb b ON a.c1=b.c4 AND a.c2=b.c5 AND a.c3=b.c6 AND xversion>version
------解决方案--------------------
应该用内连,找不到就不更新.我用左连多操作了一些记录.虽然结果一样,但是多操作了记录.
就像2,3楼写的那样就可以了.