2012-06-28 96 views
13

更新多個行我有這些表和值:使用select語句

Table1 
------------------------ 
ID | Value 
------------------------ 
2 | asdf 
4 | fdsa 
5 | aaaa 


Table2 
------------------------ 
ID | Value 
------------------------ 
2 | bbbb 
4 | bbbb 
5 | bbbb 

我想與他們各自的ID更新所有表2中使用表1的值的值。

有沒有辦法用一個簡單的SQL查詢做到這一點?

+4

可能重複的[從SELECT選擇SQL Server UPDATE](http://stackoverflow.com/questions/2334712/sql-server -update從選擇) – RedFilter

回答

33

運行一個選擇,以確保它是您想要

SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,* 
FROM Table2 t2 
INNER JOIN Table1 t1 on t1.ID = t2.ID 

更新

UPDATE Table2 
SET Value = t1.Value 
FROM Table2 t2 
INNER JOIN Table1 t1 on t1.ID = t2.ID 

而且,考慮使用BEGIN TRAN所以你可以回滾如果需要的話,但做什麼一定要COMMIT它當你滿意時。

6

如果你有兩個表中的ID,下面的工作:

update table2 
    set value = (select value from table1 where table1.id = table2.id) 

也許是更好的方法是加入:

update table2 
    set value = table1.value 
    from table1 
    where table1.id = table2.id 

注意這個語法適用於SQL Server,但可能會有所不同在其他數據庫中。

1

您可以使用別名來提高查詢:

UPDATE t1 
    SET t1.Value = t2.Value 
    FROM table1 AS t1 
     INNER JOIN 
     table2 AS t2 
     ON t1.ID = t2.ID 
0

我已經使用這個一個關於MySQL,MS Access和SQL Server。 id字段是表中重合的字段,並不一定是主索引。

UPDATE DestTable INNER JOIN SourceTable ON DestTable.idField = SourceTable.idField SET DestTable.Field1 = SourceTable.Field1, DestTable.Field2 = SourceTable.Field2... 
0
SET SQL_SAFE_UPDATES = 0; 
UPDATE m1,m2 
SET m1.code = m2.code 
WHERE 
    m1.name = (select distinct m2.name from m2 limit 1); 

這裏,更新用走。安迪在m1.code,其中condtion在子查詢中檢索的所有記錄並返回所有匹配rows.I使用限制1回一個,而不是重複。您可以使用不同的或限制1或頂部1或有計數 Sry,爲我的英語

+1

請爲代碼添加一些說明。@ HariKishore –

+1

感謝您使用此代碼段,它可能會提供一些即時幫助。通過展示*爲什麼*這是一個很好的解決方案,對未來的讀者會有更好的解決方案,這將爲它的教育價值提供一個合適的解釋[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。 –