プロが教えるわが家の防犯対策術!

MySQLでSELECT文を書く際に、1対多のリレーションで、指定した値(多側)しか一致しない値の取得方法を教えてください。

例としては下記の様にユーザが複数の区分を所持しており、チェックボックスにて指定した区分のみを持っているユーザをテーブルをJOINして取得したいと考えております。


例)kubun_id 2と3のみを所持しているユーザーを取得したい、下記の場合ユーザID 3 の人のみを取得したい

USER_TABLE
user_id ,その他付属情報
1
2
3
4


USER_KUBUN_TABLE
user_id ,kubun_id
1 ,1
1 ,2
1 ,3
2 ,1
3 ,2
3 ,3

どうぞ宜しくお願いいたします。

A 回答 (1件)

手っ取り早いのはgroup_concat


select user_id from USER_KUBUN_TABLE
group by user_id
having group_concat(distinct kubun_id order by kubun_id)="2,3"

ちゃんとやるならこう?
select user_id from USER_KUBUN_TABLE
group by user_id
having count(distinct kubun_id)=2
and sum(not kubun_id in(2,3))=0
    • good
    • 0
この回答へのお礼

ありがとう

迅速で的確なご回答ありがとうございます!
お陰様で無事に必要な情報のみを取得することができました!

お礼日時:2020/04/13 13:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!