Motivation: Ich entwerfe eine Zugangsdatenbank, um den Ausbildungsstatus meines Angestellten zu verfolgen. Jeder Mitarbeiter hat aufgrund seiner Rolle eine Schulungsvoraussetzung (z. B. müssen Verwaltungsassistenten ein Records-Management-Training und eine Telefon-Etikette absolvieren, während Elektriker eine gefährliche Sicherheit einnehmen müssen). Ich möchte in der Lage sein, einen Bericht zu erstellen, der für jede Person alle erforderlichen Schulungen und für die absolvierten Schulungen das Datum des Abschlusses angibt.LINKE VERBINDUNG Abfrage, die keine erwartete Ausgabe liefert
Schema ich die folgenden Tabellen:
- Personal - Listen Mitarbeiter Informationen, zum Beispiel Name, Telefon, E-Mail; Schlüssel:
PersonnelID
- Kurse - listet alle verfügbaren Kurse auf und gibt eine Beschreibung; Schlüssel:
CourseID
- Rollen - listet alle Arbeitsrollen in der Firma auf (z. B. Elektriker, Verwaltungsassistent); Schlüssel: Aufzeichnungen zeigen, dass
RoleID
erfordertCourseID
-RoleID
- LnkPersonnelCourses - Aufzeichnungen zeigen, dass
PersonnelID
CourseID
aufCompletionDate
abgeschlossen - LnkPersonnelRole - entfernt zugewiesen wurde
EffectiveDate
- LnkRolesCourses Aufzeichnungen zeigen, dass
PersonnelID
zu oder vonRoleID
mit Datum des Inkrafttreten
ich habe eine Abfrage qryPersonnelCourseRequirements
entsprechenauf die erforderlichen Kurse für ihre aktuellen RoleID
:
SELECT qryLastLnkPersonnelRoleAddOnly.PersonnelID, LnkRolesCourses.CourseID
FROM qryLastLnkPersonnelRoleAddOnly INNER JOIN LnkRolesCourses
ON qryLastLnkPersonnelRoleAddOnly.RoleID = LnkRolesCourses.RoleID;
Das funktioniert richtig und sagt mir jeder aktuellen Trainingsanforderungen der einzelnen:
Hier ist eine Momentaufnahme der LnkPersonnelCourses
Tabelle zeigt, welche Welchen der Kurse hat jede Person absolviert und wann (Daten sind fiktiv).
Problem: Wenn ich versuche, das in LnkPersonnelCourses
zu den Ausbildungsanforderungen in der obigen Abfrage aufgezeichnet Trainingsaufzeichnungen des Individuums anzupassen, es zeigt nur, dass die Person einen einzigen Kurs abgeschlossen, wenn in der Tat, Die Person hat bereits mehrere Kurse absolviert, die ihren Trainingsbedarf erfüllen. Ich habe die Abfrage auf verschiedene Arten versucht.Hier ist so nah wie ich bekommen haben:
SELECT pcr.PersonnelID, pcr.CourseID, lpc.CompletionDate
FROM qryPersonnelCourseRequirements AS pcr LEFT JOIN LnkPersonnelCourses AS lpc
ON (pcr.CourseID = lpc.CourseID) AND (pcr.PersonnelID = lpc.ID);
und
SELECT lpc.PersonnelID, lpc.CourseID, lpc.CompletionDate
FROM qryPersonnelCourseRequirements AS pcr LEFT JOIN LnkPersonnelCourses AS lpc
ON (pcr.CourseID = lpc.CourseID) AND (pcr.PersonnelID = lpc.ID);
Wunschverhalten:
Ich möchte die q uery das folgende Ergebnis zu produzieren:
Perfekte Diagnose - Ich habe Ihre ursprüngliche Antwort so bearbeitet, dass 'PersonalID' und' CourseID' von der 'PKR' Abfrage kommen mussten. Jetzt funktioniert das genau so wie beabsichtigt. Vielen Dank! –
Danke auch für den Schnitt – jonju