×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
トランザクション的なテーブルを、同一構造のワークテーブルにバックアップコピーを取っておいて、 ワークテーブルから元のテーブルに差分を復活させたい場合がよくあると思います。
とあるシステムのデバッグを行う時に、元のテーブルに対して削除処理が入る場合、 デバッグの前にワークテーブルにバックアップコピーを取っておきます。
その後、デバッグを行っていると削除でデータが無くなるので、データの復活が出来れば、再度最初からデバッグ処理が行えます。
そこで、最初にバックアップを行うSQLから示します。
尚、今回のテストではテーブルの内容については深く考えていませんので、テーブル名は TT_TEST としワークテーブルは TW_TEST とし、 データをにはユニークキーとして KEY の名前のカラムが存在するとします。
バックアップを行うSQL
' ワークテーブルの作成 CREATE TABLE TW_TEST LIKE TT_TEST; ' ワークテーブルへのコピー TRUNCATE TABLE TW_TEST; INSERT INTO TW_TEST SELECT * FROM TT_TEST;
取敢えず、ワークテーブルの作成についても記しています。
「CREATE TABLE ... LIKE ステートメント」はすでに存在するテーブルのテーブル定義のみをコピーして、新規にテーブルを作成することができます。
なお、オラクルのSQLでも同様のことができるようです。
実テーブルに存在しないワークテーブルのレコードの追加を行うSQL
MySQLにはオラクルの様に集合演算子の MINUS が無いため、ユニークキーの結合で存在しないものを選択し、そのデータをINSERTすることになります。
SQLは以下の様になります。
INSERT INTO TT_TEST SELECT * FROM TW_TEST AS T1 WHERE NOT EXISTS ( SELECT * FROM TT_TEST AS T2 WHERE T1.KEY = T2.KEY );
PR
コメント