私は3つのテーブルを持っています:
ユーザー
id | name
------------------
1 | Foo
2 | Bar
3 | Baz
group_type
id | name
------------------
1 | Group 1
2 | Group 2
3 | Group 3
4 | Group 4
5 | Group 5
ユーザー・グループ
id | user_id | group_type_id | [..]
------------------------------------
1 | 1 | 1 | [..]
2 | 1 | 3 | [..]
3 | 2 | 1 | [..]
4 | 1 | 5 | [..]
5 | 2 | 3 | [..]
6 | 3 | 3 | [..]
さて、現在、指定されたグループのリストから、「or」句のようなユニオンを使用してすべてのユーザーを見つけることができます。
SELECT u.*
FROM user u,
user_group ug
WHERE ug.user_id = u.id
AND ug.group_type_id IN( 1, 3, 5 )
結果:
id | name
------------------
1 | Foo
2 | Bar
3 | Baz
ここで、グループを交差させ、タイプ 1 と 3 のグループを持つすべてのユーザーを見つける必要があります。結果は次のとおりです。
id | name
------------------
1 | Foo
2 | Bar
いくつかのクエリを試しましたが、これを正しく行う方法を想像できません。