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