Задать вопрос
@dimk00z

SQL — сложный запрос многие ко многим?

Здравствуйте, давно запросы не писал, нужен совет по задаче:

В базе данных имеется таблица с товарами names(id INTEGER, name TEXT), таблица с тегами tags (id INTEGER, name TEXT) и таблица связки товаров и тегов tags_names (tag_id INTEGER, goods_id INTEGER, UNIQUE (tag_id, goods_id)).
Выведите id и названия всех товаров, которые имеют все возможные теги в этой базе.


Я понимаю, что надо вывести из таблицы goods, по условию, когда размер таблицы tags будет совпадать с количеством найденных записей для id из tags_names.
Смысл понятен, но пойму, как это в запрос изложить
  • Вопрос задан
  • 2985 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
mahmudchon
@mahmudchon
По сути, задача такая же, как если бы мы выводили все товары в магазине, с условием, что товар может принадлежать сразу нескольким категориям. Не проверял, но мб близко.
SELECT `names`.`id`, `names`.`name` FROM `names` WHERE `names`
LEFT JOIN `tags_names` ON `names`.`id` = `tags_names`.`goods_id`
GROUP BY `names`.`id`
Ответ написан
Комментировать
trapwalker
@trapwalker
Программист, энтузиаст
Как-то так
SELECT n.id, n.name
FROM names n JOIN tags_names tn ON tn.goods_id = n.id
GROUP BY n.id, n.name
HAVING COUNT(DISTINCT tn.tag_id) = (SELECT COUNT(t.id) FROM tags t)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы