2011-06-24 139 views
17

我有一個表讓我們稱之爲table1,並在兩列中的數據已被銷燬。MySQL更新與子選擇

幸運的是我有一個表的舊備份。

在舊備份中,所討論的兩列的值是正確的,但其餘列已過時,因此我不能簡單地導入整個轉儲。

所以相反,我已經將它導入到另一個表中,我將其稱爲table2。每個記錄都有一個在兩個表中都相同的ID。

所以基本上我需要一個查詢,將通過table1中的每個記錄,並使用table2中的相應值更新column1和column2。

+0

爲什麼不在table1中創建兩列並從table2的相應列中導入數據? –

回答

41

原始表table1的和備份表是表2

UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id 
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ... 
+0

這是正確的做法。多表更新可能非常有用http://dev.mysql.com/doc/refman/5.1/en/update.html – 2011-06-24 11:10:43

14

這將在SQL數據庫的所有口味的工作:

update table1 t set 
column1 = (select column1 from old_table where id = t.id), 
column2 = (select column2 from old_table where id = t.id); 

有沒有需要任何特殊的/聚合函數,因爲ID匹配將達到一行。

+0

如果你想使用完全不同的表格結構,那麼答案會更好。 – Soullivaneuh

1

我想你可以嘗試這樣的事:

UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field) 
0

正在運行下面的查詢,但它給錯誤#1093

UPDATE `mentor2122017`.`users` SET language_id = 
    (SELECT GROUP_CONCAT(ul.language_id) FROM `mentor2122017`.`users` u 
    left join `mentor`.`user_language` ul ON u.id = ul.users_id 
    where 
    ul.language_id is not null GROUP by ul.users_id)