電子書籍の厳選無料作品が豊富!

お世話になってます
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だけじゃ無理でしょうか・・・?

A 回答 (2件)

最近これと同じ質問が多いですが、はやっているのでしょうか?



SELECT UT.ID
FROM UserTable AS UT
LEFT JOIN Userinfo IS UI USING(ID)
WHERE UI.ID IS NULL
    • good
    • 0
この回答へのお礼

ありがとうございました。
ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、
サブクエリに対応していないようなのです。

何度やってもSyntaxErrorがでるので調べてみたら、
4.1からのようですね・・・

left join で無事できました!ありがとうございました!

お礼日時:2006/12/07 00:32

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
    • good
    • 0
この回答へのお礼

ありがとうございました。
ただレンタルサーバ(さくら)のMysqlが4.0.2.Xで、
サブクエリに対応していないようなのです。

何度やってもSyntaxErrorがでるので調べてみたら、
4.1からのようですね・・・

left join で無事できました!ありがとうございました!

お礼日時:2006/12/07 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!