2010-11-08 103 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