有三個表
表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