У меня есть 2 таблицы с именем tags
и things
, оба из которых содержат id
и столбец name
. Затем есть третий стол: thing_tags
. Какие есть данные, как это:MySQL получает уникальный список вещей с несколькими идентификаторами тегов
╔═══════╤═════════╗
║ tagid │ thingid ║
╟───────┼─────────╢
║ 6 │ 1 ║
║ 6 │ 2 ║
║ 12 │ 1 ║
║ 12 │ 2 ║
║ 12 │ 3 ║
║ 15 │ 4 ║
║ 16 │ 4 ║
║ 21 │ 5 ║
╚═══════╧═════════╝
В 2 колонки имеют внешних ключей ссылки на id
столбце соответствующих таблиц.
То, что я хотел бы сделать это, чтобы получить список уникальных идентификаторов вещи, которые имеют как тег # 6 и # 12, так что в этом случае результат будет идентификаторы 1
и 2
, но не 3
, то найдите элементы с этими идентификаторами в таблице things
и извлеките их. Вот мой текущий SQL-запрос:
SELECT th.*
FROM thing_tags t
LEFT JOIN things th ON t.id = th.id
WHERE t.id IN (12,6)
ORDER BY th.name ASC
Это не работает так, как я хочу его, так как он также дает мне 3-й вещь из таблицы, и возвращает правильные результаты несколько раз. Как я могу изменить этот запрос так, чтобы возвращались только те things
, которые привязаны ко всем указанным tagid
s, а не только одному, без дубликатов строк в конце?
я попробовал подобное решение до публикации этого вопроса, и MySQL возвратил ошибку о том, что «LIMIT & AND/OR/IN с подзапросами не поддерживается эта версия MySQL ». AFAIK Я использую последнюю версию. – SeinopSys
@ DJDavid98 спасибо, что ответили. Я обновил свой ответ с помощью другого варианта. Пожалуйста, дайте мне знать, если это работает. – Akshay
Вы используете 'IN' с подзапросом в обоих решениях. Мой сервер MySQL этого не позволяет. – SeinopSys