1

労働者が工場に出入りする時間を追跡するテーブルがあります。従業員の名簿を追跡する対応するテーブルもあります。従業員が対応する名簿なしでいつ出勤したかを知る必要があります。つまり、彼らは名簿に登録されていないときに働いていました。

テーブルデータの例:

時計:

名前 日付 StartTime EndTime
スミス 2013/06/25 09:00 17:00
スミス 2013/06/26 09:03 17:01
スミス 2013/06/27 08:58 16:57
ブラウン 2013/06/25 09:00 17:00

名簿:

名前 日付 StartTime EndTime
スミス 2013/06/25 09:00 17:00
スミス 2013/06/27 09:00 17:00

したがって、2013/06/26 のスミスと 2013/06/25 のブラウンを見る必要があります。

以下のスクリプトが機能しません。空白のリターンが返されます。理由はありますか?

SELECT * FROM clocks c
LEFT JOIN roster r1
ON clocks.date = roster.date
Left join roster r2
on c.name = r2.name
WHERE r1.date IS NULL
4

1 に答える 1

1

名簿テーブルに 1 回参加するだけです。

SELECT c.name, c.date
FROM clocks c
LEFT JOIN roster r
    ON c.date = r.date
    AND c.name = r.name
WHERE r.date IS NULL

このクエリは、名簿テーブルに対応する行がないクロック テーブルからすべての名前/日付を返します。必要な結合は 1 つだけです (結合述部に 2 つの部分があります)。

于 2013-06-21T03:08:25.863 に答える