У меня есть 3 таблицы: Сотрудники (EmpID, FN, LN) Обязательные тренинги (TrainingID, TrainingName) Завершенные тренинги (CompletedID, EmployeeName (поле поиска от Employee), TrainingName (поле поиска из обязательных тренингов), Дата завершения)

Затем я создал запросы для отображения всей информации в таблицах

SELECT CaregiverInformation.CaregiverID, CaregiverInformation.FirstName, CaregiverInformation.LastName
FROM CaregiverInformation;

SELECT CaregiverCompletedTraining.TrainingRecordID, CaregiverCompletedTraining.Caregiver, CaregiverCompletedTraining.Training, CaregiverCompletedTraining.CompletedDate, CaregiverCompletedTraining.ExpiredDate, IIf(Date()>=[ExpiredDate],"Expired","Current") AS IsExpired
FROM CaregiverCompletedTraining;

SELECT RequiredTrainings.TrainingID, RequiredTrainings.TrainingName, RequiredTrainings.Required
FROM RequiredTrainings;

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

Я могу получить запрос, чтобы перечислить всех сотрудников со всеми тренингами с помощью следующего кода SQL

SELECT qry_CaregiverInformation.CaregiverID, qry_CaregiverInformation.FirstName, qry_CaregiverInformation.LastName, qry_RequiredTrainings.TrainingName
FROM qry_CaregiverInformation, qry_CompletedTrainings, qry_RequiredTrainings
WHERE (((qry_CaregiverInformation.CaregiverID) Like "*") AND ((qry_RequiredTrainings.TrainingName) Like "*"));

Однако я не могу получить полную информацию для правильной работы. Я пробовал объединение, и количество столбцов не совпадает. Если я добавляю пустые столбцы в мой SQL, я получаю ошибку несоответствия данных. Любая помощь будет принята с благодарностью.

1 ответ1

0

это просто простое соединение слева:

select * 
from CaregiverInformation i 
left join RequiredTrainings r on r.CaregiverID = i.CaregiverID
left join CaregiverCompletedTraining c on c.TrainingRecordID = r.TrainingRecordID

если вы хотите ограничить i только если существует r, используйте там внутреннее соединение:

select * 
from CaregiverInformation i 
inner join RequiredTrainings r on r.CaregiverID = i.CaregiverID
left join CaregiverCompletedTraining c on c.TrainingRecordID = r.TrainingRecordID

Подробнее о различиях между объединениями читайте здесь: https://stackoverflow.com/questions/448023/what-is-the-difference-between-left-right-outer-and-inner-joins

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .