UPDATE TABLE1 set TABLE1.col1 = TABLE2.col1
FROM TABLE2 INNER JOIN TABLE3 ON COL2 = TABLE2.COL2
WHERE TABLE1.COL3 = TABLE3.COL3
如果JOIN
每个条件返回多个行,上述查询是否可以工作?我无法对其进行更新,尽管可以单独使用Join
Table3
和Table2
。使用select语句和内部联接的更新
请帮助。我希望这些信息是足够的。
UPDATE TABLE1 set TABLE1.col1 = TABLE2.col1
FROM TABLE2 INNER JOIN TABLE3 ON COL2 = TABLE2.COL2
WHERE TABLE1.COL3 = TABLE3.COL3
如果JOIN
每个条件返回多个行,上述查询是否可以工作?我无法对其进行更新,尽管可以单独使用Join
Table3
和Table2
。使用select语句和内部联接的更新
请帮助。我希望这些信息是足够的。
不,你必须从Table2中只选择1行 - sql server会选择Table2中的任何合适的行。
如果有多行,那么任意行将用于更新。不会有错误发生。 您可以强制要求连接返回一行changing the UPDATE to a MERGE
+1谢谢你是我的错误指向的源码 – 2012-01-11 11:30:45
OP在2005年。 – 2012-01-11 12:01:38
由于您在SQL Server 2005上,因此您无法使用MERGE
。
为了得到一个确定性的结果,你需要一个相关的子查询。
UPDATE TABLE1
SET TABLE1.col1 = ISNULL((SELECT TOP (1) TABLE2.col1
FROM TABLE2
INNER JOIN TABLE3
ON TABLE3.COL2 = TABLE2.COL2
WHERE TABLE1.COL3 = TABLE3.COL3
ORDER BY TABLE2.col1), TABLE1.col1)
@onedaywhen是的,你恰到好处。我已经检查过它并更正了答案 – 2012-01-11 11:30:02
@oneday的确如此! – 2012-01-11 11:31:09
@onedaywhen所以教义和僧侣! 8-)更正。我测试堆和集群键加入 - 在clust它选择最后一个值,在堆 - 任意 – 2012-01-11 11:55:22