mySQL запрос фильтрации по параметрам, исключающий неполные совпадения
Нужно отобрать продукты, которые имеют все заданные параметры. 33 и 13.
SELECT * FROM product_options WHERE option_id IN (33,13)
Вышеуказанный запрос выдаёт продукты которые хотя бы по одному параметру совпадают с запросом (что логично). Всем параметрам соответствует только продукт с id = 11.
Ответы (2 шт):
Автор решения: Akina
→ Ссылка
Обычное реляционное деление.
SELECT product_id
FROM product_options
WHERE option_id IN (33,13)
GROUP BY product_id
HAVING COUNT(DISTINCT option_id) = 2
Автор решения: Slava Rozhnev
→ Ссылка
Ниже еще один запрос JOIN:
SELECT product_id
FROM product_options po1
JOIN product_options po2 USING (product_id)
WHERE po1.option_id = 13 AND po2.option_id = 33;
+============+
| product_id |
+============+
| 11 |
+------------+
