Category Archives: SQL

二つのテーブル間の同期をとる(MySQL)

何かのCSVファイルをDBに取り込んでマスターとする時、テンポラリに一時的に格納した後に処理をして、その後でマスターに更新するような処理をすることがありますが、その時にはこのようなSQLを使えばよいだろう。
mainテーブルにはunique_idというプライマリーキーが設定されているものとする。

INSERT INTO main (unique_id,information, information2)
    (select unique_id,information, information2 from temp)
    ON DUPLICATE KEY
        UPDATE
        main.information = temp.information,
        main.information2 = temp.information2;

これで、unique_idが無い場合にはinsert, キーがダブる場合にはUPDATEのinformationとinformation2フィールドのUPDATEが行われる。
コードが古くなって、廃止されたものはデータベースから削除する、という場合は、次のようなDeleteのSQLを実行して、「メインにあってテンポラリにない」テーブルを削除する。

delete from main where unique_id not in (select unique_id from temp);

tempデータベースのunique_idには、インデックスを貼っておくこと。処理スピードが違います。