Задать вопрос
@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
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Инженер по тестированию
    5 месяцев
    Далее
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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;

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

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

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