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

Как выбрать данные по коньюктивным условиям на множественных связях?

Есть 3 таблицы (классика many2many):
Items (id, name, price)
Orders (id, time)
OrderItems (order_id, item_id, count)

Выборка по дизъюнкции (список заказов, содержащих хотя бы один из элементов) работает так:
SELECT * FROM Orders o
JOIN OrderItems i ON i.order_id = o.id
WHERE i.item_id IN (1, 2, 3)
GROUP BY o.id;


А как выбрать те заказы из Orders, которые содержат все заданные элементы (1, 2, 3)?
Без кривых подзапросов типа
(
SELECT COUNT(DISTINCT oi.item_id) 
FROM OrderItems oi 
WHERE oi.order = i.order AND oi.item_id IN (1, 2, 3) GROUP BY oi.order_id
) >= 3
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Taksist410
можно так:

SELECT * FROM Orders o
JOIN OrderItems i1 ON i1.order_id = o.id AND i1.item_id =1
JOIN OrderItems i2 ON i2.order_id = o.id AND i2.item_id =2
JOIN OrderItems i3 ON i3.order_id = o.id AND i3.item_id =3
GROUP BY o.id;

но "кривой" подзапрос мне больше нравится.
Ответ написан
Ваш ответ на вопрос

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

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