• ベストアンサー

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のみを抽出する方法はないものでしょうか。 よろしくお願いします。

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

  • ベストアンサー
回答No.1

以下のクエリで抽出可能です。 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') いかがでしょうか。

ranshine
質問者

お礼

なるほど、同じテーブルで比較する発想がありませんでした。 勉強になりました。 ありがとうございました。

その他の回答 (1)

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

こうですね select id from `table` where hoge in('AAA','BBB') group by id having count(distinct hoge)=2 つまり、hogeがAAAかBBBのデータをidごとにカウントして 2個であるidが正解です

ranshine
質問者

補足

Having句を使うとスマートにかけますね。 勉強になりました。 ありがとうございました。

関連するQ&A