У меня есть «реляционная таблица», в которой хранятся записи и теги. Как и в случае переполнения стека, в сообщении может быть много тегов, а в теге может быть много сообщений.
Таблица содержит только два столбца и выглядит следующим образом:
pid tid
1 3
1 4
2 1
2 3
2 4
3 1
3 3
3 4
4 1
4 3
5 1
5 3
6 2
6 4
В приведенной выше таблице сообщения 2 и 3 имеют идентичный набор тегов (значения в другом столбце tid
), как и сообщения 4 и 5.
Я хочу выбрать все посты (идентификаторы постов), где существует еще один пост с таким же набором tid
, поэтому запрос должен вернуть 2 3 4 5
из столбца pid
.
Я работаю на MariaDB 10.1.38.
Вот моя собственная попытка, но, очевидно, она провалилась:
SELECT p.pid
FROM post_tags AS p
WHERE EXISTS (
SELECT *
FROM post_tags AS p2
WHERE
GROUP_CONCAT(p.tid SEPARATOR ',') = GROUP_CONCAT(p2.tid SEPARATOR ',')
GROUP BY p2.pid
)
GROUP BY p.pid;
MariaDB сказала мне:
ОШИБКА 1111 (HY000): недопустимое использование групповой функции