みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2011-06-23 03:14:44

QNo.6829144

困ってます

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

以下のクエリで抽出可能です。

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')


いかがでしょうか。

投稿日時 - 2011-06-23 03:57:07

お礼

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

投稿日時 - 2011-06-24 01:07:38

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こうですね

select id
from `table`
where hoge in('AAA','BBB')
group by id
having count(distinct hoge)=2

つまり、hogeがAAAかBBBのデータをidごとにカウントして
2個であるidが正解です

投稿日時 - 2011-06-23 09:34:29

補足

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

投稿日時 - 2011-06-24 01:10:00

あなたにオススメの質問