我有一个问题:我必须获取所有未在指定 schedule 中安排的司机姓名。我可以使用以下查询获取指定时间表中安排的所有司机姓名,但我不能否定它。请给我指导如何做。谢谢。
select drivername from driver inner join driverschedule
on driver.driverid = driverschedule.driverid
where scheduleid = 1
尝试使用 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
使用 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 )