我有一個表讓我們稱之爲table1,並在兩列中的數據已被銷燬。MySQL更新與子選擇
幸運的是我有一個表的舊備份。
在舊備份中,所討論的兩列的值是正確的,但其餘列已過時,因此我不能簡單地導入整個轉儲。
所以相反,我已經將它導入到另一個表中,我將其稱爲table2。每個記錄都有一個在兩個表中都相同的ID。
所以基本上我需要一個查詢,將通過table1中的每個記錄,並使用table2中的相應值更新column1和column2。
我有一個表讓我們稱之爲table1,並在兩列中的數據已被銷燬。MySQL更新與子選擇
幸運的是我有一個表的舊備份。
在舊備份中,所討論的兩列的值是正確的,但其餘列已過時,因此我不能簡單地導入整個轉儲。
所以相反,我已經將它導入到另一個表中,我將其稱爲table2。每個記錄都有一個在兩個表中都相同的ID。
所以基本上我需要一個查詢,將通過table1中的每個記錄,並使用table2中的相應值更新column1和column2。
原始表table1的和備份表是表2
UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ...
這是正確的做法。多表更新可能非常有用http://dev.mysql.com/doc/refman/5.1/en/update.html – 2011-06-24 11:10:43
這將在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匹配將達到一行。
如果你想使用完全不同的表格結構,那麼答案會更好。 – Soullivaneuh
我想你可以嘗試這樣的事:
UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field)
正在運行下面的查詢,但它給錯誤#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)
爲什麼不在table1中創建兩列並從table2的相應列中導入數據? –