这是一个这样的基本问题,但由于某种原因,我所有的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 ...)处理这些蠢事。 –