すべてのレコードを返すクエリを作成しようとすると困る

ms-access sql
すべてのレコードを返すクエリを作成しようとすると困る

3つのテーブルを持つデータベースがあります。 「名簿」、「トレーニングコース」、および「コース登録」名簿とコース登録は「ETID」(従業員トレーニングID)で接続されています。 コース登録とトレーニングコースは、「コースID」で接続されています。 +私は、すべての従業員とすべてのコースのYES / NO値を返すクエリを作成しようとしています。 特定の従業員を調べるために次のように書きましたが、すべての従業員を返す正しい方法を見つけることができないようです。 任意の助けがいただければ幸いです。

SELECT [TRAINING COURSES].[course id]
     , [TRAINING COURSES].[course name]
     , "YES" AS Completed
     , [COURSE ENROLLMENT].[training date]
FROM [TRAINING COURSES]
INNER JOIN [COURSE ENROLLMENT]
            ON [COURSE ENROLLMENT].[course id]=[TRAINING COURSES].[course id]
WHERE [COURSE ENROLLMENT].[ETID]=[ENTER ETID]

UNION ALL

SELECT [TRAINING COURSES].[course id]
     , [TRAINING COURSES].[course name]
     , "No" AS Completed
     , NULL
FROM [TRAINING COURSES]
WHERE NOT EXISTS
(
    SELECT *
    FROM [COURSE ENROLLMENT]
    WHERE [COURSE ENROLLMENT].[course id]=[TRAINING COURSES].[course id]
    AND [COURSE ENROLLMENT].[ETID]=[ENTER ETID:]
)
ORDER BY [TRAINING COURSES].[course name];

  0  0


ベストアンサー

このクエリでUnionを使用する必要はありません。 INNER JOINをLEFT OUTER JOINに置き換えると、クエリと同じように実行されますが、パフォーマンスは向上します。

SELECT [Training Courses].[Course Id], [Training Courses].[Course Name],
        IIF(IsNull([Course Enrollment].[ETID]), "NO", "YES") as Completed,
        [Course Enrollment].[Training Date]
FROM    [Training Courses]
        LEFT OUTER JOIN [Course Enrollment]
            ON [Training Courses].[Course Id] = [Course Enrollment].[Course Id]
ORDER BY [Training Courses].[Course Name]

すべての従業員とすべてのコースが必要な場合は、名簿とトレーニングコースの表を相互に結合する必要があります。 次に、上記のような「はい」または「いいえ」を取得するために、コース登録テーブルとの左結合を行います。

3


両方のサブクエリから「WHERE [COURSE ENROLLMENT]。[ETID] = [ENTER ETID]」をドロップします。

0


タイトルとURLをコピーしました