Mysql - 选择与所有标签匹配的ID

时间:2012-12-11 13:21:49

标签: mysql sql select

我有一个交叉引用表:

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匹配所有标签。

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

1 个答案:

答案 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