否定SQL查询

时间:2013-10-02 11:15:27

标签: mysql sql

我遇到了一个问题:我必须提取未在指定时间表中安排的所有驱动程序名称。我可以使用以下查询获取在指定计划中安排的所有驱动程序名称,但我不能否定它。请告诉我如何做的方向。感谢。

select drivername from driver inner join driverschedule
on driver.driverid = driverschedule.driverid
where scheduleid = 1

simple ERD

2 个答案:

答案 0 :(得分:4)

尝试使用LEFT OUTER JOIN并检查没有匹配的行(即r / h表列为空): -

SELECT drivername 
FROM driver 
LEFT OUTER JOIN driverschedule
ON driver.driverid = driverschedule.driverid
AND scheduleid = 1
WHERE driverschedule.driverid IS NULL

答案 1 :(得分:2)

使用EXISTS 应该比左连接执行得更好也可以,但是显然比带有IS NULL的LEFT JOIN慢(参见注释)。

select drivername 
from driver
where not exists ( select 1
                   from driverschedule
                   where driver.driverid = driverschedule.driverid
                   and   driverschedule.scheduleid = 1 )