我应该显示尚未分配轮班的司机。我已经通过司机号的主键加入了表格。这是我的代码。
select distinct dr_drvname
from driver,shift
where dr_drvnum <> sh_drvnum;
我在代码中使驱动程序编号不相等以显示不合格的驱动程序,但此代码显示所有驱动程序。
猜测你的表结构,我怀疑你想要类似的东西
select d.dr_drvname
from driver d
where not exists( select 1
from shift s
where d.dr_drvnum = s.sh_drvnum );
与贾斯汀的回答相反,这是一个使用连接的版本:
SELECT d.dr_drvname
FROM driver d
LEFT JOIN shift s
ON s.sh_drvnum = d.dr_drvnum
WHERE s.sh_drvnum IS NULL
通常,最好始终明确指定您的连接,而不是使用隐式连接语法(逗号分隔FROM
子句)。
(但你为什么要在列前面加上 -short-table 前缀:'dr_'
?包括在初始表中?当你似乎让它们加上一个稍长的前缀时:'drv'
?)