如何使用w3schools的sql查询中不存在?

时间:2013-08-12 21:59:33

标签: sql not-exists

我在w3schools

处遇到not exists sql查询问题

我希望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的客户。查询的不正确之处。 (我需要特别使用in


PS:我知道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}}解决方案不起作用?

1 个答案:

答案 0 :(得分: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
;