我有一个交叉引用表:
ID | tag
1 | 4
1 | 5
1 | 6
2 | 4
2 | 5
2 | 8
3 | 2
我需要选择与一组标记的 all 匹配的ID。例如,如果我获得了标签'4','5'
,我会获得ID '1','2'
。如果我获得了标签'4','2'
,我将无法获得任何ID,因为没有与所有标签匹配的ID。
此外,如果我获得了标记'4','9'
,那么我也不应该获得任何结果ID,因为搜索'9'
会导致NULL
值,因此没有ID匹配所有标签。
过去两天我一直在拔头发。希望有人可以帮助我。
答案 0 :(得分:17)
查询的想法是,您需要将记录数与您在WHERE
子句中提供的值的数量相匹配。
SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(*) = 2
如果未在每个ID的标记上指定唯一约束,则需要DISTINCT
SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(DISTINCT tag) = 2