SQL更新查询和'子查询返回多个值'

时间:2010-11-08 04:01:34

标签: sql sql-server tsql sql-server-2008

我正在使用SQL Server 2008 R2。有一个主表(表A),并尝试使用临时表中的值更新它(表B)。

SQL Server错误输出,说子查询返回了多个值,但是我没有看到这是怎么回事,因为子查询返回的值是表B的主键。

以下是查询:

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

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

2 个答案:

答案 0 :(得分:7)

您的子查询根本没有相关性。子查询中的标识符“TableA.key”引用子查询的FROM子句中的TableA,而不是更新的目标表(也发生在TableA中)。您不希望使用两表连接的结果集更新TableA.field。你只想要这个:

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

答案 1 :(得分: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)