- ベストアンサー
こちらのテーブルにあってこちらのテーブルにないIDを抽出するSQL
お世話になってます MySQLでデータを格納しております。 以下のようにUserTable,Userinfoという2つのテーブルがあったとします。 ■UserTable -ID(key) -username ■Userinfo -ID(key) -user_info1 -user_info2 UserTableはユーザID作成時に自動でレコードが生成されます。 登録されたユーザは自分の情報を自分自身で登録することにより Userinfoテーブルにレコードが生成されます。 ここで、ユーザIDを作成したユーザのうち、自分の情報を登録していない ユーザIDを抽出したいのですが、この場合、どのようなSQLを書けばよいのでしょうか・・・? ユーザIDが、UserTableにあって、UserInfoにない、というものを作ればよいのですが・・・ SQLだけじゃ無理でしょうか・・・?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最近これと同じ質問が多いですが、はやっているのでしょうか? SELECT UT.ID FROM UserTable AS UT LEFT JOIN Userinfo IS UI USING(ID) WHERE UI.ID IS NULL
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLのバージョンやEXPLAINの結果を見て、以下のような方法を使います。 (1)not existsを使う select `ID` from UserTable as x where not exists (select * from Userinfo as y where x.`ID`=y.`ID`) (2)not inを使う select `ID` from UserTable where `ID` not in(select `ID` from Userinfo) (3)outer joinを使う select x.`ID` from UserTable as x left join Userinfo as y on x.`ID`=y.`ID` where y.`ID` is null
お礼
ありがとうございました。 ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、 サブクエリに対応していないようなのです。 何度やってもSyntaxErrorがでるので調べてみたら、 4.1からのようですね・・・ left join で無事できました!ありがとうございました!
お礼
ありがとうございました。 ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、 サブクエリに対応していないようなのです。 何度やってもSyntaxErrorがでるので調べてみたら、 4.1からのようですね・・・ left join で無事できました!ありがとうございました!