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}}解决方案不起作用?
答案 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
;