2

我在w3schools遇到not existssql 查询问题

我希望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解决方案不起作用?

4

1 回答 1

2

我相当确定问题在于您在 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
;
于 2013-08-12T23:04:33.523 回答