0

との 2 つのテーブルがJOBありWORKERます。

JOB テーブル

  • ジョビッド

ワーカーテーブル

  • WORKERID
  • JOBID (JOB テーブルの外部キー)
  • 休暇 ('Y' または 'N')

これら 2 つのテーブルを使用して、現在ワーカーが割り当てられていないジョブのリストを見つけたいと考えています。次のクエリを作成しましたが、集計関数SUMCASE WHEN.

これよりも優れたクエリはありますか?

SELECT
    SUBQUERY.JOBID
FROM
(
    SELECT
        JOBID,
        SUM
        (
            CASE WHEN
                VACATION = 'N'
            THEN 1
            ELSE 0
            END
        ) NUM_WORKERS
    FROM
        JOB
    LEFT JOIN
        WORKER
    ON
        JOB.JOBID = WORKER.JOBID
    GROUP BY
        JOB.JOBID
) SUBQUERY
WHERE
    SUBQUERY.NUM_WORKERS = 0
4

3 に答える 3

1

Select * From job Where jobid not in(worker とは異なる jobid を選択)

それでおしまい。

于 2013-10-20T13:00:22.153 に答える
1

こちらをご覧ください。

SELECT JOBID 
FROM JOB 
WHERE JOBID NOT IN (
    SELECT j.JOBID 
    FROM JOB j 
    JOIN WORKER w ON j.JOBID = w.JOBID
    WHERE w.VACATION = 'N'
    GROUP BY j.JOBID
)

SQLfiddle の例:

于 2013-10-20T13:00:52.317 に答える
0

私はこれを使用します:

SELECT j.jobid 
FROM job AS j
WHERE NOT EXISTS
      ( SELECT 1
        FROM worker AS w 
        WHERE w.vacation = 'N'
          AND w.jobid = j.jobid
      ) ;

またはこれ:

SELECT j.jobid 
FROM job AS j

EXCEPT

SELECT w.jobid
FROM worker AS w 
WHERE w.vacation = 'N' ;
于 2013-10-20T22:11:08.037 に答える