SQL

MINUSの注意点

  • このエントリーをはてなブックマークに追加

MINUS(マイナス)は落とし穴があるので気を付けて下さい。

MINUSは最初のSELECT文が母数になるようです。そのため、MINUSを使ってデータの差分を抽出したい場合、データ件数が多い方のテーブルを最初にSELECTしないと差分が正しく抽出できません。

下記にサンプルSQLを記載します。

MINUSの注意点

TB_MINUS_Aのレコード

SELECT * FROM TB_MINUS_A;

  NO NAME         BIRTH_YMD
---------------
   1 東京 太郎   1980/01/01
   2 東京 次郎   2000/01/01

TB_MINUS_Bのレコード

SELECT * FROM TB_MINUS_B;

  NO NAME         BIRTH_YMD
---------------
   1 東京 太郎   1980/01/01

MINUSを使って差分を抽出(TB_MINUS_Bを最初にSELECTする)

SELECT * FROM TB_MINUS_B
MINUS
SELECT * FROM TB_MINUS_A;

レコードが選択されませんでした。

MINUSを使って差分を抽出(TB_MINUS_Aを最初にSELECTする)

SELECT * FROM TB_MINUS_A
MINUS
SELECT * FROM TB_MINUS_B;

        NO NAME                 BIRTH_YMD
---------- -------------------- --------------------
         2 東京 次郎           2000/01/01

TB_MINUS_Aテーブルよりレコードが少ないTB_MINUS_Bを最初にSELECTすると、差分が出力されません。TB_MINUS_Aを母数として差分を検索しているためです。MINUSの落とし穴ですので、気をつけて下さい。

私は本番環境でのデータパッチ作業でミスするところでした。

以上です。

  • このエントリーをはてなブックマークに追加

コメント

コメントを残す

*