使用select语句和内连接更新

时间:2012-01-11 10:25:32

标签: sql sql-server sql-server-2005

UPDATE TABLE1 set TABLE1.col1 = TABLE2.col1
FROM TABLE2 INNER JOIN TABLE3 ON COL2 = TABLE2.COL2
WHERE TABLE1.COL3 = TABLE3.COL3

如果JOIN每个条件返回多行,上述查询是否有效?我无法更新,尽管可以单独Join Table3Table2

请帮忙。我希望这些信息足够。

3 个答案:

答案 0 :(得分:3)

如果有多行,则将使用任意行进行更新。不会给出任何错误。 您可以强制要求changing the UPDATE to a MERGE

的连接返回一行

答案 1 :(得分:2)

当您使用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)  

答案 2 :(得分:1)

不,你必须从Table2中只选择一行 - sql server将从Table2中选择任何合适的行。

相关问题