我正在使用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)
任何帮助都像往常一样非常感谢!
答案 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)