Как использовать не существует в SQL-запрос с w3schools?

У меня проблема с not exists SQL запрос в w3schools

я бы хотел select все клиенты, которые работают с shipperid = 1 Но нет shipperid = 3, Я попробовал следующее:

select o1.customerid, o1.shipperid
from orders o1
where o1.shipperid=1 and not exists
(select o2.customerid from orders o2
where o1.orderid=o2.orderid
and o2.shipperid=3)
order by customerid
;

Приведенный выше запрос дает всем клиентам, которые работают с shipperid = 1 и не исключает клиентов, которые работают с shipperid = 3, Что не правильно с запросом. (Мне нужно специально использовать not exists )


PS: я знаю in решение:

select customerid, shipperid
from orders
where shipperid=1 and customerid not in (
select customerid
from orders
where shipperid=3
)
order by customerid;

Почему не not exists решение работы?

1 ответ

Решение

Я вполне уверен, что проблема заключается в том, как вы присоединяетесь к коррелированному подзапросу orderid = orderid. Я не знаком с этим набором данных, но кажется удивительным, что один и тот же заказ будет иметь разных грузоотправителей, и он добавляет условие, не найденное в вашем "правильном" ответе. Это должно работать:

select o1.customerid
      ,o1.shipperid
from orders as o1
where o1.shipperid = 1 
and not exists (
    select o2.orderid 
    from orders as o2
    where o1.customerid = o2.customerid
    and o2.shipperid = 3)
order by customerid
;
Другие вопросы по тегам