这必须是一个普通的事情,但我没有运气谷歌搜索。
我有一个类别表:
Table A
catid | text
1 | Category A
2 | Category B
3 | Category C
然后将此表连接到一张地图,该地图可以跟踪照片所在的类别
Table B
catid | photoid
1 | 1
2 | 1
1 | 2
3 | 3
我需要做的是过滤查询,以便仅返回选择的每个类别中的照片。例如:
感谢您提供任何帮助。
-Matt
答案 0 :(得分:1)
最简单的方法之一是:
SELECT
*
FROM
B
WHERE
B.catid IN (1, 2)
GROUP BY
B.photoid
HAVING
COUNT(B.photoid) = 2
要匹配3个类别:
SELECT
*
FROM
B
WHERE
B.catid IN (1, 2, 3)
GROUP BY
B.photoid
HAVING
COUNT(B.photoid) = 3
您也可以多次加入同一个表。或者做一个子查询。我会测试几种不同的方法来查看哪种方法对数据集的执行速度最快。
答案 1 :(得分:0)
使用不存在子查询
Select distinct photoid
From photoCategory pc
Where Not Exists
(Select * From category c
Where catId <> pc.catId)
答案 2 :(得分:-1)
答案在这里......
https://stackoverflow.com/a/17026879/520857
对不起刚才的误导性回答
顺便说一句,你要做的事情被称为INTERSECT,MySQL本身并不支持链接中的奇怪解决方案。