這是一個這樣的基本問題,但由於某種原因,我所有的SQL知識都剛剛退出大樓。三個基本表:MySQl返回與第二個表值匹配和/或的記錄
Table A
id | name
---------
1 | John
2 | Mike
3 | Henry
4 | Cooper
Table B
id | tag
---------
1 | chocolate
2 | ice cream
3 | cookies
和聯接兩個表:
Table C
id | name_id | tag_id
---------------------
1 | 1 | 2
2 | 1 | 3
3 | 2 | 1
4 | 3 | 2
5 | 3 | 3
我想找個誰都喜歡巧克力和餅乾的人。以下給我所有喜歡巧克力和餅乾的人,但我只想要喜歡兩者的人(巧克力和餅乾而不是巧克力或餅乾)。
SELECT name FROM tablea a JOIN tablec c ON a.id = c.name_id WHERE c.tag_id IN (1,3)
下顯然是行不通的:
SELECT name FROM tablea a JOIN tablec c ON a.id = c.name_id WHERE c.tag_id = 1 AND c.tag_id = 3 GROUP BY name
,但它本質上我想要的。另外,我想這樣做而不涉及JOIN中的tableb,因爲我在這裏使用它將會有不同的其他表加入,我不想混淆圖片。這一定非常簡單!
+1尼斯把戲:) – sll
只要'表C'不能有重複的記錄(即'(name_id,tag_id)')的唯一約束,這看起來很棒 – Phil
@Phill:我想有些人可以真的喜歡cookies,但至少在mysql中,你也可以有'COUNT(DISTINCT ...)處理這些蠢事。 –