- 締切済み
複数テーブルの結合の仕方
いつもお世話になっております。 MySQLとPHPで開発をしております。 複数のテーブルからのデータの取得方法について教えていただきたいです。 テーブル:qes(key:q_id) |q_id|memo|del_id| +------------------+ |1 |ああ|NULL | |2 |いい|NULL | |3 |うう|NULL | テーブル:ans(key:q_id、a_id) |q_id|a_id|memo|del_id| +------------------------+ |2 |1 |かか|delete| |2 |2 |きき|delete| |3 |1 |くく|NULL | |3 |2 |けけ|NULL | |3 |3 |ここ|NULL | 上記のようなテーブルがあります。 ans>q_idがないか、ans>del_idがNULLのデータを取得したいと考えています。 期待する結果は・・・ |q_id|memo|del_id| +------------------+ |1 |ああ|NULL | |2 |いい|NULL | 以下のようなクエリを発行した場合 q_id=1 は取得できるのですが、q_id=2 が取得できません。 select q.* from qes q left join ans a using(q_id) where a.a_id is NULL and a.del_id is NULL group by q.q_id order by q.q_id ASC temporary table を使用しないとできないでしょうか。 ご教示よろしくお願いいたします。 <環境> MySQL:3.23.56 PHP:Version 4.3.1
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
であれば、新たな命題をそのままあてはめればヒットしますね SELECT DISTINCT q.* FROM qes AS q LEFT JOIN ans AS a USING(q_id) WHERE a.q_id IS NULL OR a.del_id IS NOT NULL >ans>q_idがないか、ans>del_idがNULLではない 「ないか」なのでANDではなくOR NULLではないのでNOT NULL
- yambejp
- ベストアンサー率51% (3827/7415)
命題が >ns>del_idがNULLのデータを取得 となっているのに >q_id=2 が取得できません。 というのはどう判断すればよろしいのでしょうか? NULLのデータがほしいならq_id=3ですよね?
補足
yambejpさん、ご回答ありがとうございます。 よく確認せず投稿してしまい、申し訳ございません。 [誤] ans>q_idがないか、ans>del_idがNULLのデータを取得したいと考えています。 [正] ans>q_idがないか、ans>del_idがNULLではないデータを取得したいと考えています。