Как вы загружаете заказы, где все партии будут соответствовать условию? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть две таблицы в базе данных mssql: заказы и партии.Каждый заказ может иметь много лотов.Стоимость сохраняется в каждом лоте.Я хотел бы нарисовать все ордера, где стоимость КАЖДОГО его лота выше, например, 100. Если в какой-либо части ордера стоимость не превышает 100, это приведет к дисквалификации ордера.Возможно ли это сделать одним запросом?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Я думаю, что самый простой способ - это использовать MIN():

SELECT b.order_id
FROM batches b
GROUP BY b.order_id
HAVING MIN(b.cost) >= 100;

Если вы хотите получить информацию о заказе:

select o.*
from orders o
where not exists (select 1 from batches b where b.order_id = o.order_id and b.cost < 100);
0 голосов
/ 21 мая 2018

Один простой подход использует агрегирование по заказам для проверки каждого лота:

SELECT o.id
FROM orders o
INNER JOIN batches b
    ON o.batch_id = b.id
GROUP BY o.id
HAVING COUNT(CASE WHEN b.cost <= 100 THEN 1 END) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...