• ベストアンサー

テーブルの差分を抽出したいのですが。。。

mysqlでUSER_TABLとUSER_CHK_TABL一致しないデータ全てを出力したいのですがmysqlだと『NOT EXISTS』が使えないので困ってます。 TABLE構造はUSER_TABLとUSER_CHK_TABLも下記です。 create table USER_TABL (USERNAME varchar(255),MAIL_ADDRESS varchar(255)); oracleならこんな感じかと思ったのですが。。。 select * from USER_TABL where NOT EXISTS (select * from USER_CHK_TABL)

質問者が選んだベストアンサー

  • ベストアンサー
  • taskuni
  • ベストアンサー率71% (49/69)
回答No.2

>ご回答頂いたSQLはUSER_TABLに存在しUSER_CHK_TABLに存在しないレコードが全て抽出可能ですか? はい。 LEFT JOIN をして、USER_CHK_TABLに該当するレコードがない場合、カラムの値がNullになることを利用したSQLです。 >お互いのTABLEに存在しないレコードの抽出する事も可能ですか? #1のSQLのテーブルを逆にしたら、 「USER_CHK_TABL に存在し、USER_TABL に存在しないレコードを抽出」はできます。 UNION がつかえれば、くっつけておしまいなんでしょうけど。 それ以外の方法は残念ながら思いつきません。

その他の回答 (1)

  • taskuni
  • ベストアンサー率71% (49/69)
回答No.1

USER_CHK_TABL に存在し、USER_TABL に存在しないレコードは抽出しなくていいのなら。 SELECT * FROM USER_TABL LEFT JOIN USER_CHK_TABL ON USER_TABL.USERNAME=USER_CHK_TABL.USERNAME AND USER_TABL.MAIL_ADDRESS=USER_CHK_TABL.MAIL_ADDRESS WHERE USER_CHK_TABL.USERNAME IS NULL

shill_kenji
質問者

補足

ご回答ありがとうございます。 ||>USER_CHK_TABL に存在し、USER_TABL に存在しないレコードは抽出しなくていいのなら ご回答頂いたSQLはUSER_TABLに存在しUSER_CHK_TABLに存在しないレコードが全て抽出可能ですか? また、お互いのTABLEに存在しないレコードの抽出する事も可能ですか?

関連するQ&A