Das Verknüpfen von Abfragen im Zugriff funktioniert nicht

344
Jessica Jordan

Ich habe 3 Tabellen Mitarbeiter (EmpID, FN, LN) Erforderliche Schulungen (TrainingID, TrainingName) Abgeschlossene Schulungen (CompletedID, EmployeeName (Suchfeld vom Mitarbeiter), TrainingName (Suchfeld von den erforderlichen Schulungen), Abschlussdatum)

Ich habe dann Abfragen erstellt, um alle Informationen in den Tabellen anzuzeigen

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; 

Wenn ein Mitarbeiter an einer Schulung teilnimmt, wird dies in der Tabelle der abgeschlossenen Schulungen nachverfolgt. Ich muss eine Abfrage erstellen, in der alle Schulungen angezeigt werden, die in den erforderlichen Schulungen für alle Mitarbeiter in der Mitarbeitertabelle aufgeführt sind, unabhängig davon, ob sie in der abgeschlossenen Schulungstabelle enthalten sind. Wenn es sich jedoch in der abgeschlossenen Trainingstabelle befindet, möchte ich, dass es das Datum angibt, an dem das Training absolviert wurde.

Ich kann eine Abfrage erhalten, um alle Mitarbeiter mit allen Schulungen mit dem folgenden SQL-Code aufzulisten

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 "*")); 

Ich kann jedoch nicht die vollständigen Informationen erhalten, um ordnungsgemäß zu funktionieren. Ich habe eine Vereinigung ausprobiert und die Anzahl der Spalten stimmt nicht überein. Wenn ich in SQL SQL-Spalten hinzufüge, erhalte ich einen Datenfehler. Jede Hilfe wäre sehr dankbar.

0
Ich finde es immer hilfreich, auf http://sqlfiddle.com/ oder einem ähnlichen Online-Tool einige Testbeispiel-SQL-Daten und -Anfragen zu haben, mit denen Sie Probleme haben, und auch dort einen Link mit Ihrer Frage zu posten, damit die Leute mit Ihren tatsächlichen Daten helfen können und seien Sie versichert, dass die Ergebnisse das sind, was erwartet wird. Nur für den Fall, dass Sie nichts anderes bestätigen können, sollten Sie sich die Zeit nehmen und dieses Setup als solches erhalten, wenn Sie immer noch nicht das bekommen, was Sie brauchen, und dann [Bearbeiten] und einen Link zu Ihren Daten hinzufügen usw., damit die Leute, die helfen können, testen können . Pimp Juice IT vor 5 Jahren 0

1 Antwort auf die Frage

0
emte

Es ist nur ein einfacher linker Join:

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

Wenn Sie i nur begrenzen möchten, wenn r existiert, verwenden Sie dort inner join:

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

Weitere Informationen zu den Unterschieden zwischen Joins finden Sie hier: https://stackoverflow.com/questions/448023/what-is-the-difference- zwischen-left-right- outer-und-inner- joins