SQLで二つのテーブルを比べる方法

こんにちは、さるまりんです。

同じ構造の二つのテーブルを比較する機会があったのでメモしておきます。

まずは二つのテーブルから全てのレコードを一緒に取得します。
こんな感じです。

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を返します。

二つのテーブルが完全に一致しているのであれば結果は返ってきません。

データ移行後、以降前と移行後でテーブルの中身を比較する必要が出てきたので、この方法でやってみました。
プログラミングってパズルみたいです。
いろんな機能を便利に組みあわす。なんだか楽しいです。
興味を持っていろんなことを学んでいきたいです。

読んでくださってありがとうございました。

それではまた!