2010-03-22 83 views
2

此SQL語句的例子是非常接近我想我需要......如何使用select語句的結果更新表中的列,該語句使用作爲where子句的一部分進行更新的行?

update table1 set value1 = x.value1 from 
     (select value1, code from table2 
     where code = something) as x 

不過,我需要做的是從爲在行改變上面例子中的「東西」的價值正在更新。

例如,我試過,但沒有奏效:

update table1 A set value1 = x.value1 from 
     (select value1, code from table2 
     where code = A.something) as x 

這是一次性的操作來更新現有的表,我真的不想找高性能的方式來做到這一點。任何完成任務的解決方案都足夠好。

編輯澄清

我使用Microsoft SQL Server 6.5。

編輯

因爲我已經有幾個聰明的人告訴我,很多問題的答案張貼在這裏應該工作過。我的具體sql語句比我在示例中使用的僞sql更復雜。出於某種原因,我嘗試的答案(其中大多數)沒有奏效。同樣聰明的人也不知道他們爲什麼不工作。

我選擇的答案確實對我有用。未來的回答者可能應該看看下面的幾個其他答案,以幫助解決他們自己的問題,而不僅僅是解決我的問題。

+0

有Table 1和表2之間的關係?可能是我們可以使用INNER JOIN來加入兩個表來更新Table1中的一列。讓我知道。 – 2010-03-22 18:58:51

+0

@Ashish - 你幾乎已經在你的答案中得到了答案。謝謝! – 2010-03-22 19:28:54

回答

1

您是否嘗試過這樣的事情: -

UPDATE table1 
SET x.Value1=y.Value1 
FROM Table1 x INNER JOIN 
Table2 y ON x.Code=y.Something 
+0

這最終是什麼工作。我必須將select中的「table1.something」移動到該選項的更新部分上。我會在我的問題中發佈工作的僞sql。 – 2010-03-22 19:27:48

+0

其實,現在我看着它,不需要重新發布僞sql。它看起來像你輸入的內容。 – 2010-03-22 19:37:56

1

試試這個

UPDATE table1 AS a 
SET value1 = x.value1 
FROM table2 AS x 
WHERE x.code = a.something 
+0

我收到「關鍵字附近的語法錯誤」爲「。」。當我嘗試這個... – 2010-03-22 18:51:22

+0

其實我認爲這個應該工作,如果兩個「as」被刪除。您不能爲正在更新的表別名,而且您不需要「as」來爲處於「from」語句的表名生成別名。 – 2010-03-22 19:10:53

1

聽起來像它應該像這樣工作:

Update table1 Set value1 = 
(Select value1 
    From table2 
    Where table2.code = table1.something 
) 
+0

這與我第一次嘗試類似。 「A附近有錯誤的語法」。「當我嘗試這個。 – 2010-03-22 18:54:59

+0

@沙魯柔道:我編輯了我的答案,但現在它與拉里斯蒂格的差不多。如果'table1'不是你真正的表名,你確定你在第一行和最後一行都替換了嗎? – 2010-03-22 19:00:57

2

更新是在不同的DBMS出了名的不同。但嘗試沿着這些線:

UPDATE Table1 SET Value1 = 
    (SELECT Value1 FROM Table2 WHERE code = Table1.Something) 
+0

我也試過這個。我收到消息「列前綴'Table1'與查詢中使用的表名或別名不匹配。」這是指select中的「Table1」。 – 2010-03-22 18:56:51

+0

這可能是最便攜的解決方案 - 它甚至可以在Firebird中工作,它根本不支持FROM中的FROM。我很驚訝它不適用於SQL Server 6.5;不幸的是,我沒有安裝方便測試。 – 2010-03-22 19:15:33

-1

「我正在使用Microsoft SQL Server 6.5」? 爲什麼? 爲什麼你沒有獲得免費的SQL 2008 Express版本,或者如果你符合資格,SQL 2008開發人員版約USD50?

+0

@Johan van Zyl:歡迎來到StackOverflow!既然你沒有提供答案,你應該添加這個作爲評論而不是答案。 – 2010-03-22 19:03:05

+0

誰知道。也許數據庫被嵌入到一些航海硬件中?如果解決程序設計問題需要購買新的軟硬件和/或軟件,那麼一個人在這個行業就沒有多大的作用。 – 2010-03-22 19:18:09

+0

這是一個現有的數據庫服務器,工作得很好。我很確定Express版本(我一直使用)不支持這裏涉及的應用程序所需的數百個連接。 – 2010-03-22 19:25:14

0
UPDATE Table1, Table2 
SET Table1.Value1 = Table2.Value1 
WHERE Table2.Code = Table1.Something 

這有幫助嗎?

0

試試這個:

update table1 
set value1 = x.value1 
from table2 x 
where something = x.code