Объединение запросов в доступе не работает

259
Jessica Jordan

У меня есть 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, я получаю ошибку несоответствия данных. Любая помощь будет принята с благодарностью.

0
Я всегда нахожу полезным иметь несколько тестовых примеров данных SQL и запросов, с которыми у вас проблемы на http://sqlfiddle.com/ или какой-либо аналогичный онлайн-инструмент, и публиковать там ссылку с вашим вопросом, чтобы люди могли помочь с вашими фактическими данными. и будьте уверены, что результаты - это то, что ожидается. Просто на тот случай, если вы не можете подтвердить иное, подумайте о том, чтобы потратить время и получить эту настройку как таковую, если вы все еще не получаете того, что вам нужно, а затем [отредактировать] и добавить ссылку на ваши данные и т. Д., Чтобы люди, которые могут помочь, могли проверить , Pimp Juice IT 6 лет назад 0

1 ответ на вопрос

0
emte

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

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