use*_*048 4 sql sql-server sql-server-2008-r2 sql-server-2012
我有以下SQL查询:
UPDATE db1.dbo.oitems
SET f2 = oo.f2,
f3 = oo.f3,
f4 = oo.f4
FROM db1.dbo.oitems o
INNER JOIN db2.dbo.oitems oo
ON o.orderid = oo.orderid
Run Code Online (Sandbox Code Playgroud)
每个表都在不同的数据库中,它们具有相同的列但不同的数据,其中一些匹配在id但不在数据中.我只想将我要更新的表中的列f2,f3,f4的值设置为第二个表中的值,如果它们具有相同的orderid.上面的命令一直说0行受影响,所以我的逻辑出了什么问题?
您有两种方法可以解决这个问题.第一个是Gordon Linoff在另一个答案中描述的.第二个看起来像这样:
UPDATE o
SET f2 = oo.f2,
f3 = oo.f3,
f4 = oo.f4,
FROM db1.dbo.oitems o
INNER JOIN db2.dbo.oitems oo
ON o.orderid = oo.orderid;
Run Code Online (Sandbox Code Playgroud)
出于几个原因,我更喜欢第二种.原因之一是,你可以替换UPDATE o SET使用SELECT,以获得一个可执行SELECT语句.另一个是意图不是隐藏在第一个选项中.您还可以使用LEFT OUTER或第一个选项未提供的其他连接类型.
对于这一切更深入的解释退房 http://sqlity.net/en/1595/a-join-a-day-update-delete/ 以及的其余http://sqlity.net/en/1146/a-join-a-day-introduction / series.
您的问题中的查询有语法错误,所以我很惊讶它运行(set子句中的最后一个逗号).我会把查询写成:
UPDATE db1.dbo.oitems
SET f2 = oo.f2,
f3 = oo.f3,
f4 = oo.f4
FROM db2.dbo.oitems oo
WHERE oitems.orderid = oo.orderid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9176 次 |
| 最近记录: |