Поиск значений в базе в дубликатах

Есть 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.

→ Ссылка