我遇到了一个问题:我必须提取未在指定时间表中安排的所有驱动程序名称。我可以使用以下查询获取在指定计划中安排的所有驱动程序名称,但我不能否定它。请告诉我如何做的方向。感谢。
select drivername from driver inner join driverschedule
on driver.driverid = driverschedule.driverid
where scheduleid = 1
答案 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 )