同じ構成の2つのテーブルの差分を取得するSQL文です。
サンプルSQL
例)同構成の2つのテーブル「m_dept1」「m_dept2」のデータの差分を取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
SELECT * FROM (SELECT DECODE( MAX(flg), 1, 'M_DEPT1のみに存在する行', 2, 'M_DEPT2のみに存在する行', '') AS "結果" ,key1 FROM (SELECT '1' as flg, tbl01.* FROM m_dept1 UNION ALL SELECT '2' as flg, tbl02.* FROM m_dept2) GROUP BY key1 HAVING COUNT(*) = 1) UNION ALL SELECT * FROM (SELECT '差異のある行' AS "結果" ,key1 FROM (SELECT * FROM m_dept1 UNION SELECT * FROM m_dept2) GROUP BY key1 HAVING COUNT(*) > 1) ; |
「m_dept1」「m_dept2」の部分をお使いの環境に読みかえてご使用ください。
実行例
以下、同じ構成の2つのテーブルを例にします。
KEY1 | NAME | PEOPLE |
---|---|---|
100 | 総務 | 10 |
101 | 経理 | 5 |
102 | 営業 | 20 |
KEY1 | NAME | PEOPLE |
---|---|---|
100 | 総務 | 10 |
101 | 経理 | 4 |
103 | 開発 | 30 |
- 結果
- 結果 KEY1 ------------------------- -------- M_DEPT1のみに存在する行 102 M_DEPT2のみに存在する行 103 差異のある行 101
メモ
- 2つの環境それぞれでマスタをメンテナンスしてしまった場合等に、差分を取るのにご利用ください。
- 単純に差分のみ取得したい場合は、MINUS集合演算子をご使用ください。