• ベストアンサー

こちらのテーブルにあってこちらのテーブルにない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だけじゃ無理でしょうか・・・?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

最近これと同じ質問が多いですが、はやっているのでしょうか? SELECT UT.ID FROM UserTable AS UT LEFT JOIN Userinfo IS UI USING(ID) WHERE UI.ID IS NULL

kbr
質問者

お礼

ありがとうございました。 ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、 サブクエリに対応していないようなのです。 何度やってもSyntaxErrorがでるので調べてみたら、 4.1からのようですね・・・ left join で無事できました!ありがとうございました!

その他の回答 (1)

回答No.2

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

kbr
質問者

お礼

ありがとうございました。 ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、 サブクエリに対応していないようなのです。 何度やってもSyntaxErrorがでるので調べてみたら、 4.1からのようですね・・・ left join で無事できました!ありがとうございました!

関連するQ&A