2010-11-08 168 views
3

我正在使用SQL Server 2008,R2。有一个主表(表A),并试图用临时表中的值更新它(表B)。SQL更新查询和'子查询返回多个值'

SQL服务器被示数去,说子查询返回多个值,但我看不出这是可能的,因为子查询返回的值是表的主键B.

这里的查询:

UPDATE TableA 
    SET TableA.field = (SELECT TableB.field 
         FROM TableA 
        INNER JOIN TableB ON TableA.key = TableB.key) 

像往常一样非常感谢任何帮助!

+1

TableA的关键主要也是? – 2010-11-08 04:04:12

+0

克里斯,是的。但是,这不应该是一个问题,应该吗? – 2010-11-08 04:07:48

+0

您需要查看子查询的输出,而不是子查询:'SELECT TableA.key,TableB.field FROM TableA JOIN TableB ON TableA.key = TableB.key' – 2010-11-08 04:13:10

回答

7

您的子查询根本没有关联。子查询中的标识符“TableA.key”引用子查询的FROM子句中的TableA,而不是更新的目标表(它也会发生TableA)。您不想使用双表连接的结果集来更新TableA.field。你只是想这样:

UPDATE TableA 
    SET TableA.field = (SELECT TableB.field 
         FROM TableB 
         WHERE TableA.key = TableB.key) 
+0

谢谢史蒂夫,就是这样! – 2010-11-08 06:49:26

1

你说通过查询(TableB.Field)返回列是主键。 但是由于重复TableB.Key值而发生此问题。 确保TableB.Key对于任何值都不重复。 在这里你将不得不写一些登录来返回只有一个记录的情况下子查询返回一个值的记录多于1。例如:

UPDATE TableA 
    SET TableA.field = (SELECT Top 1 TableB.field 
     FROM TableA 
     INNER JOIN TableB ON TableA.key = TableB.key) 
+0

只是想让你知道在2015年10月你的答案帮助另一个寻找一个优雅的方式围绕'子查询返回多行'的难题。谢谢! – user761758 2015-10-01 14:56:35