我想覆盖table1中的行,与table2中的其他行覆盖相同的数据库。
例如,table1有以下数据:
COL1 | Col2 | Col3 | Col4 | Col5 | idDie
----------------------------------------------
0001 | unknown | unknown | unknown | unknown | frKey1
0002 | unknown | unknown | unknown | unknown | frKey2
0003 | unknown | unknown | unknown | unknown | frKey3
0004 | unknown | unknown | unknown | unknown | frKey4
0005 | unknown | unknown | unknown | unknown | frKey5
0006 | unknown | unknown | unknown | unknown | frKey6
和table2:
COL1 | Col4 | Col5 | Col6 | Col7
---------------------------------
0003 | value | value | value | value
0004 | value | value | value | value
0005 | value | value | value | value
所以我想覆盖table1中的默认数据,其中来自表2的数据(table2具有与table1相同的列名但不是所有列,只有几列),其中COL1> 0002和COL1< 0006
还有另一个table3,其形式如下:
idDie | Col22 | Col33 | Col44
frKey1 |未知|未知|未知 frKey2 |未知|未知|未知 frKey3 |未知|未知|未知 frKey4 |未知|未知|未知 frKey5 |未知|未知|未知 frKey6 |未知|未知|未知
具有id的frKey3,frKey3和frKey4的Dies也应该被覆盖。它们在table1中有一个引用外键,表2中的Col6和Col7信息是应该复制到table3的信息。
是否可以在一个sql语句中执行此操作?
答案 0 :(得分:3)
对于SQL Server,您需要的更新查询是:
update t1
set
t1.col4 = t2.col4,
t1.col5 = t2.col5
from table1 t1
join table2 t2 on t1.col1 = t2.col1;
鉴于您的示例数据,Table1在更新后将如下所示:
COL1 Col2 Col3 Col4 Col5
----------- ------- ------- ------- -------
1 unknown unknown unknown unknown
2 unknown unknown unknown unknown
3 unknown unknown value value
4 unknown unknown value value
5 unknown unknown value value
6 unknown unknown unknown unknown