Как использовать не существует в 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
;