2011-06-24 3 views
17

私はテーブルを持ってそれをtable1と呼ぶことができ、2つのカラムのデータは破壊されました。サブセレクションによるMySQLアップデート

私はテーブルの古いバックアップを持っています。

古いバックアップでは、問題の2つの列の値は正しいものの、残りの列は古くなっているため、ダンプ全体を単純にインポートすることはできません。

代わりに、私はtable2と呼ぶ別のテーブルにそれをインポートしました。各レコードは、両方のテーブルで同じIDを持ちます。

基本的には、table1の各レコードを調べ、table2の対応する値でcolumn1とcolumn2を更新するクエリが必要です。

+0

table1に2つの列を作成し、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 –

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の一致が1行だけがヒットしますので。私はあなたがこのような何か試すことができると思い

+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) 
を与えます
関連する問題