Mysql - выбор идентификаторов, соответствующих всем тегам

У меня есть таблица перекрестных ссылок:

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

Мне нужно выбрать идентификаторы, соответствующие всем наборам тегов. Например, если бы мне дали теги '4','5', я бы получил идентификаторы '1','2'. Если бы мне дали теги '4','2', я бы не получил никаких идентификаторов, потому что не было ID, которые соответствовали бы всем тегам.

Кроме того, если мне дали теги '4','9', то я также не должен получать результирующие идентификаторы, потому что поиск '9' приведет к значению NULL, и поэтому никакие идентификаторы не совпадают со всеми тегами.

Я вытаскиваю волосы за последние 2 дня. Надеюсь, кто-то может мне помочь.

Ответ 1

Идея запроса заключается в том, что вам нужно сопоставить количество записей с количеством значений, которое вы указали в предложении WHERE.

SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(*) = 2

Если для каждого идентификатора не было указано единственное ограничение, то требуется DISTINCT

SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(DISTINCT tag) = 2