13

我有一个交叉引用表:

ID | tag
1  | 4
1  | 5
1  | 6
2  | 4
2  | 5
2  | 8
3  | 2

我需要选择与所有一组标签匹配的 ID。例如,如果给我标签,'4','5'我会得到 IDs '1','2'。如果给我标签'4','2',我不会得到任何 ID,因为没有匹配所有标签的 ID。

此外,如果给我标签,'4','9'那么我也不应该得到任何结果 ID,因为搜索'9'会产生一个NULL值,因此没有 ID 匹配所有标签。

这两天我一直在拔头发。希望有人可以帮助我。

4

1 回答 1

22

查询的想法是您需要将记录数与您在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
于 2012-12-11T13:23:02.760 回答