SQL показывает заказы только с одной строкой заказа. если больше строк ничего не отображают

Я пытаюсь найти заказы с одним конкретным товаром в строке заказов, но если их несколько, я не хочу видеть ни одну из строк.

Это образец двух заказов, из которых я хочу получить только одно повторное выполнение. заказ 9891026 имеет две строки, а 9891025 - только одну строку.

          select  order_no, line_no
    from customer_order_line
    where order_no in('9891026','9891025')

результат

Я понятия не имею, как правильно составить для этого запрос.

3 ответа

Решение

Сначала найдите однострочные номера заказов order_no(подзапрос), а затем выберите из заказов только с этими номерами заказов. Обратите внимание, что запрос соединения (хотя, возможно, его труднее читать) может быть более эффективным.

      select * 
from customer_order_line 
where order_no in
(
 select order_no 
 from customer_order_line
 group by order_no 
 having count(*) = 1
) -- this is the list of single-item orders
and order_no in (9891026,9891025) -- this is the list of target orders

Один из способов - проверить, exists с line_no больше 1:

      select ol.order_no, ol.line_no
from customer_order_line ol
where ol.order_no in (9891026, 9891025)
and not exists (
  select * from customer_order_line x
  where x.order_no = ol.order_no and x.line_no > 1
);

В качестве альтернативы вы можете сделать GROUP BY и использовать HAVING чтобы убедиться, что там только одна строка.

      select ol.order_no, min(ol.line_no)
from customer_order_line ol
where ol.order_no in ('9891026', '9891025')
group by ol.order_no
having count(*) = 1
Другие вопросы по тегам