Unindo consultas no acesso não funcionando

0

Eu tenho 3 tabelas Empregados (EmpID, FN, LN) Treinamentos Requeridos (TrainingID, TrainingName) Treinamentos concluídos (CompletedID, EmployeeName (campo de pesquisa do Employee), TrainingName (campo de pesquisa de Training Required), Data de Conclusão)

Eu então criei consultas para exibir todas as informações dentro das tabelas

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;

Se um funcionário fizer um treinamento, ele será rastreado na tabela de treinamentos concluída. Eu preciso criar uma consulta que mostrará todos os treinamentos listados nos treinamentos necessários para todos os funcionários da tabela de funcionários, independentemente de eles estarem na tabela de treinamento concluída. No entanto, se estiver na tabela de treinamento completa, quero listar a data em que o treinamento foi realizado.

Eu posso obter uma consulta para listar todos os funcionários com todos os treinamentos com o seguinte código 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 "*"));

No entanto, não consigo que as informações completas funcionem corretamente. Eu tentei uma união e a quantidade de colunas não corresponde. Se eu adicionar colunas nulas no meu SQL, recebo um erro de incompatibilidade de dados. Qualquer ajuda seria muito apreciada.

    
por Jessica Jordan 25.05.2018 / 23:11

1 resposta

0

é apenas uma simples junção à esquerda:

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

se você quiser limitar i somente se r existir, então use inner join lá:

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

leia mais sobre as diferenças entre as junções aqui: link

    
por 25.05.2018 / 23:52