- ベストアンサー
テーブルの差分を抽出したいのですが。。。
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)
- みんなの回答 (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)
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
補足
ご回答ありがとうございます。 ||>USER_CHK_TABL に存在し、USER_TABL に存在しないレコードは抽出しなくていいのなら ご回答頂いたSQLはUSER_TABLに存在しUSER_CHK_TABLに存在しないレコードが全て抽出可能ですか? また、お互いのTABLEに存在しないレコードの抽出する事も可能ですか?