はじめに
このページで得られるもの
表題の通り
流れ
- テーブル1からテーブル2を引き算して、差分を取得する。… ①
- テーブル2からテーブル1を引き算して、差分を取得する。… ②
- ①と②の結果をデータ結合
- データ結合した結果の件数を取得
サンプルSQL
テーブルの定義は、全く同じ状態であることが大前提
select count(*) as data_diff_count from ( ( select * from hoge1 except select * from test1 ) -- hoge1 - test1 union ( select * from test1 except select * from hoge1 ) -- test1 - hoge1 ) as diff_all ;
注意
サンプルSQLは、簡易的で分かりやすく「*(アスタリスク)」で全カラム指定しているが、本来はテーブルのカラムを全て指定するべきである。また、json型のカラムは「*」で指定できないので、型変換で対応するかそのカラムを除いたカラムの差分を取得することになるだろう。
最後に
使い道はさまざまだが、特にテスト結果のエビデンス(データ加工や削除等)や検証で使える。データ加工前と加工後で想定した結果件数であることがこのSQLで一目瞭然。
データ差分の中身を閲覧したければ、「count(*)」を任意のカラムに指定してもOK