#sql-server
#sql-server
Вопрос:
У меня есть таблицы «Продукты», «Категории» и таблица отношений для внешних ключей «ProductsToCategories» классическим способом нормализации.
В моем приложении вы можете выбрать категорию с помощью выпадающего списка, но я хочу переключиться на радиокнопки, где пользователь может выбрать более одной категории.
Как я могу реализовать запрос, чтобы найти только продукты, в которых несколько объектов совпадают в таблице отношений?
Псевдокод: выберите * из продуктов для внутреннего объединения ProductsToCategories … где Category-ID = 35 И Category-ID = 36 И Category-ID = 9
Ответ №1:
Один простой вариант использует агрегирование:
SELECT
p.id,
p.name
FROM Products p
INNER JOIN ProductsToCategories pc
ON p.id = pc.product_id
WHERE
pc.category_id IN (9, 35, 36)
GROUP BY
p.id,
p.name
HAVING
COUNT(DISTINCT pc.category_id) = 3;
Основная идея здесь заключается в агрегировании по каждому продукту, сначала удаляя все записи, кроме тех, которые принадлежат к трем интересующим категориям. Затем мы утверждаем, что остаются три отдельные категории, подразумевая, что продукт соответствует.