こんにちは、さるまりんです。
同じ構造の二つのテーブルを比較する機会があったのでメモしておきます。
まずは二つのテーブルから全てのレコードを一緒に取得します。
こんな感じです。
SELECT a.code, a.name
FROM a
UNION ALL
SELECT b.code, b.name
FROM b
UNION
では重複しているレコードが削除されるのでUNION ALL
をつけています。
これを元に次のようなSQLで片方にしかないものが取得できます。
SELECT code, name
FROM (
SELECT a.code, a.name
FROM a
UNION ALL
SELECT b.code, b.name
FROM b
) ab
GROUP BY code, name
HAVING COUNT(*) = 1
ORDER BY code
最初のクエリで全てのレコードを返しているので、どちらにも存在するレコードについてはCOUNT(*)
は2を返します。どちらか片方にしか入っていないレコードの場合はCOUNT(*)
は1を返します。
二つのテーブルが完全に一致しているのであれば結果は返ってきません。
データ移行後、以降前と移行後でテーブルの中身を比較する必要が出てきたので、この方法でやってみました。
プログラミングってパズルみたいです。
いろんな機能を便利に組みあわす。なんだか楽しいです。
興味を持っていろんなことを学んでいきたいです。
読んでくださってありがとうございました。
それではまた!