0

我应该显示尚未分配轮班的司机。我已经通过司机号的主键加入了表格。这是我的代码。

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

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

4

2 回答 2

3

猜测你的表结构,我怀疑你想要类似的东西

select d.dr_drvname
  from driver d
 where not exists( select 1
                     from shift s
                    where d.dr_drvnum = s.sh_drvnum );
于 2012-11-26T23:48:55.773 回答
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-table 前缀:'dr_'?包括在初始表中?当你似乎让它们加上一个稍长的前缀时:'drv'?)

于 2012-11-26T23:53:50.007 回答