显示从未分配班次的驾驶员姓名

时间:2012-11-26 23:46:07

标签: sql oracle

我应该显示没有被分配班次的司机。我通过驱动程序编号的主键加入了表格。这是我的代码。

select distinct dr_drvname
from driver,shift
where dr_drvnum <> sh_drvnum;

我在代码中使驱动程序编号不相同,以显示不合格的驱动程序编号,但此代码显示所有驱动程序。

2 个答案:

答案 0 :(得分:3)

猜测你的桌子结构,我怀疑你想要像

这样的东西
select d.dr_drvname
  from driver d
 where not exists( select 1
                     from shift s
                    where d.dr_drvnum = s.sh_drvnum );

答案 1 :(得分:1)

与贾斯汀的答案相反,这是一个使用连接的版本:

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-表前缀:'dr_'?在初始表中包含?当你看起来有一个稍长的前缀时:'drv'?)