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-テーブルプレフィックスを付けるの'dr_'ですか?最初のテーブルに含めますか?とにかく少し長いプレフィックスを付けているように見える場合:'drv'?)

于 2012-11-26T23:53:50.007 に答える