1

2 つのテーブルがstaffdetailsありworklog、スタッフの開始時間と終了時間があります。この SQL を実行したときに仕事を開始していないスタッフをリストする結果を探しています。以下の例を参照してください。

  • staffdetailsテーブル

    stafid  staffnm
    ------  -------
    100200  John
    100201  Jenny
    100203  Camas
    
  • Worklogテーブル

    stfid   startime   finishtime
    ------  ---------  ----------
    100200  11.30 p.m  12.30 p.m
    100201  10.00 a.m  10.30 a.m
    100200  12.35 p.m  12.40. p.m
    100200  12.45 p.m
    100203  1.30 p.m   2.30 p.m
    300200  10.0 p.m   6.00 p.m
    
  • 出力

    staffid   stafname
    -------   --------
    100203    Camas
    100201    Jenny
    
4

1 に答える 1

1

使用LEFT JOIN:

SELECT s.Name, s.staffId
FROM staffdetails s
LEFT JOIN working w ON w.staffid = s.staffid
WHERE w.staffId IS NULL;

SQL フィドルのデモ

更新: 2 つのテーブルの一致しないリストを取得する場合は、2 つLEFT JOINの を次のUNION ALLように組み合わせることができます。

SELECT s.Name, s.staffId
FROM staffdetails s
LEFT JOIN working w ON w.staffid = s.staffid
WHERE w.staffId IS NULL
UNION ALL
SELECT w.Name, w.staffId
FROM working w
LEFT JOIN staffdetails s ON w.staffid = s.staffid
WHERE s.staffId IS NULL;

更新された SQL Fiddle デモ

于 2012-11-10T09:45:33.743 に答える