Попытка создать запрос, который будет возвращать все записи, поставила меня в тупик - PullRequest
0 голосов
/ 12 апреля 2011

У меня есть база данных с тремя таблицами.«Реестр», «Курсы обучения» и «Зачисление на курсы». Реестр и «Зачисление на курсы» связаны между собой «ETID» (ID для обучения сотрудников).Запись на курсы и учебные курсы связаны между собой «Идентификатором курса».
Я пытаюсь создать запрос, который будет возвращать ВСЕХ сотрудников и значение ДА / НЕТ для всех курсов.Я написал следующее, чтобы посмотреть на конкретных сотрудников, но я не могу найти правильный способ вернуть всех сотрудников.Любая помощь будет оценена.

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];

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Вам не нужно использовать Union в этом запросе. Замените ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, и оно выполнит то же, что и ваш запрос, но будет работать лучше.

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]

Если вы хотите, чтобы все сотрудники и все курсы были вам необходимы, необходимо выполнить перекрестное соединение между таблицей реестра и учебного курса. Затем вы должны выполнить левое соединение с таблицей регистрации на курс, чтобы получить ответ «да нет», как указано выше.

0 голосов
/ 12 апреля 2011

Отбрасывание WHERE [COURSE ENROLLMENT].[ETID]=[ENTER ETID] из обоих подзапросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...