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

use*_*531 10 mysql sql select

我有一个交叉引用表:

ID | tag
1  | 4
1  | 5
1  | 6
2  | 4
2  | 5
2  | 8
3  | 2
Run Code Online (Sandbox Code Playgroud)

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

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

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

Joh*_*Woo 17

查询的想法是您需要将记录数与您在WHERE子句中提供的值的数量相匹配.

SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)

如果没有为每个ID在标记上指定唯一约束,则DISTINCT需要

SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(DISTINCT tag) = 2
Run Code Online (Sandbox Code Playgroud)