- ベストアンサー
mysqlで横方向ではなく縦方向の条件抽出は…
id hoge num 01 AAA 0 01 BBB 1 02 AAA 1 03 BBB 0 というテーブルがあったとします。 select id from table where hoge='AAA' and num=0 のような条件で検索するのは普通ですが、 カラムではなくレコード単位で見て hogeの値がAAAとBBBの両方である場合のデータとして「01」というidのみを抽出する方法はないものでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以下のクエリで抽出可能です。 SELECT DISTINCT A.id FROM table AS A, table AS B WHERE A.id = B.id AND A.hoge = 'AAA' AND B.hoge = 'BBB' JOINを利用した方法です。 他にもサブクエリを用いた方法などもあります。 SELECT DISTINCT A.id FROM table AS A WHERE A.hoge = 'AAA' AND EXISTS (SELECT id FROM table AS B WHERE A.id = B.id AND B.hoge = 'BBB') いかがでしょうか。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
こうですね select id from `table` where hoge in('AAA','BBB') group by id having count(distinct hoge)=2 つまり、hogeがAAAかBBBのデータをidごとにカウントして 2個であるidが正解です
補足
Having句を使うとスマートにかけますね。 勉強になりました。 ありがとうございました。
お礼
なるほど、同じテーブルで比較する発想がありませんでした。 勉強になりました。 ありがとうございました。