Поиск значений в базе в дубликатах
Есть 2 таблицы: 1 - таблица (orders) с заказами с колонками order_id, order_status, order_descr(опционально) 2 - таблица (products) с продуктами с колонками order_id, product_id
Нужно сделать выборку по product id = 1234(А) и 7345(Б). То есть в результате показал заказы, которые содержат и продукт А и продукт Б, ну и желательно показал заказы в которых только эти продукты и ничего более. Я пробовал делать поиск в дубликатах, но моих знаний для этого недостаточно. Подскажите пожалуйста решение.
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Типовое решение:
SELECT order_id
FROM orders
GROUP BY order_id
HAVING MAX(product_id = 1234) -- есть хотя бы один
AND MAX(product_id = 5678) -- есть хотя бы один
AND NOT MAX(product_id NOT IN (1234, 5678)) -- нет других
Если надо только наличие, то проще:
SELECT order_id
FROM orders
WHERE product_id IN (1234, 5678)
GROUP BY order_id
HAVING COUNT(DISTINCT product_id) = 2
PS. Предполагается, что product_id определён как NOT NULL.