- ベストアンサー
SQL文の質問
DBの検索で AAAというデータベースで user_id,log_no,status と項目があって、 user_idとlog_noでプライマリーキーで 検索する条件が 同一user_idが複数件ある場合のみ、 log_noが0のuser_idだけ検索したいという SQL文を教えてください。 たとえば、DBには user_id log_no status 'aaaa1' 0 0 'aaaa2' 0 0 'aaaa2' 1 0 'aaaa3' 0 0 'aaaa3' 1 0 とはいっていたら、 'aaaa2' 0 0 'aaaa3' 0 0 の2件だけSELECTできるSQL文は可能でしょうか? すみません。 どなたか宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういう手法もアリかと... SELECT * FROM AAA AS A WHERE log_no = 0 AND 1 < (SELECT COUNT(*) FROM AAA WHERE user_id = A.user_id) 相関副問い合わせという手法です。 サブクエリの検索がキーを使って行われるので高速です。 検証はしてないですが、おそらく動きます(笑)
その他の回答 (2)
- blood_kazuaki
- ベストアンサー率40% (39/96)
DBの種類がわからないので、これで確実に大丈夫! とは言い切れませんが^^; SELECT AAA.* FROM AAA WHERE AAA.log_no=0 AND AAA.user_id IN ( SELECT B.user_id,COUNT(B.user_id) FROM AAA AS B GROUP BY B.user_id HAVING COUNT(B.user_id) >= 2 ) 未確認ですが、たぶんこれで動くと思います^^; ポイントは ・サブクエリ ・同じ表を別名付け ・GROUP BY句 ・HAVING句 ですね。 ご存知ありませんでしたら、勉強してみて下さい。
select AAA.user_id, AAA.log_no, AAA.status from AAA, (select distinct user_id from AAA where log_no > 0) a where AAA.log_no = 0 and AAA.user_id = a.user_id; ・・・かなり無理矢理な感じです。ダメですか?(^-^;