複選標籤

有三個表
表A儲存了名字

id name
1 張三
2 李四
3 王五

表B儲存了各種標籤

id tag
1
2
3
4
5

表C則紀錄了A裡面有哪些B

A_id B_id
1 1
1 3
2 1
2 4
3 2
3 3
3 5

因為想要做複選,所以一開始是寫成
SELECT a.* FROM A a, C c WHERE a.id=c.A_id AND c.B_id IN (1,2)

可是這樣是 OR 的選擇,會把所有人都抓出來,但我希望的是 AND 的選擇,只要抓出完全符合的即可,於是變成這樣
SELECT a.* FROM A a JOIN (SELECT A_id FROM C WHERE B_id IN (1,2) GROUP BY A_id HAVING COUNT(DISTINCT B_id) >= 2) c ON a.id=c.A_id