2

我有一个问题:我必须获取所有未在指定 schedule 中安排的司机姓名。我可以使用以下查询获取指定时间表中安排的所有司机姓名,但我不能否定它。请给我指导如何做。谢谢。

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

简单的 ERD

4

2 回答 2

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
于 2013-10-02T11:17:48.313 回答
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 )
于 2013-10-02T11:24:38.553 回答