Firebird 2.5: Abfrage mit zweifachem Zugriff auf gleiche Tabelle

ukyo184

Mitglied
Hallo,

ich verzweifle gerade an einer Abfrage und hoffe auf eure Unterstützung. Und zwar möchte ich eine Abfrage über zwei Tabellen machen. Hierbei ist es so, dass ich in der Abfrage auf die zweite Tabelle doppelt zugreifen muss. Die Tabellen sind so in der Art aufgebaut:

Tabelle1 (Personal):
PersonalNr, Name, Vorname

Tabelle2 (Zusatzfelder_Personal):
PersonalNr, zID, Inhalt

Ich möchte nun auf zwei unterschiedliche Zusatzfelder aus Tabelle 2 zugreifen - auf das Kündigungsdatum und die Auszahlungsart. Diese Zusatzfelder sind so angelegt, dass das Zusatzfeld Kündigungsdatum immer die zID "1800045" hat und das Zusatzfeld Auszahlungsart die zID "1800066". Die entsprechenden Datensätze in der Tabelle Zusatzfelder werden aber erst dann angelegt, wenn die Zusatzfelder beim entsprechenden Personal auch gefüllt werden.

Es kann also sein, dass zu einer Personalnummer in der Tabelle Zusatzfelder_Personal keiner, einer oder zwei Datensätze existieren. Die Datensätze haben aber auf jeden Fall eine dieser beiden o. g. zIDs.

Ich habe nun folgende Abfrage erstellt:

SQL:
Select  p.Nachname, p.Vorname, p.Personalnr, z1.inhalt AS Kuendigungsdatum, z2.inhalt AS Auszahlungsart
FROM Personal AS p LEFT JOIN zusatzfelder_personal AS z1 ON p.personalnr=z1.personalnr
LEFT JOIN zusatzfelder_personal AS z2 ON p.personalnr=z2.personalnr
WHERE (z1.zid="1800045" OR z1.zid IS NULL)
AND (z2.zid="1800066" OR z2.zid IS NULL)

Hier habe ich nun das Problem, dass mir die Mitarbeiter angezeigt werden, zu denen kein Eintrag oder zwei Einträge in der Tabelle Zusatzfelder existiert. Es werden aber keine Mitarbeiter angezeigt, bei denen nur ein Eintrag mit der zID "1800066" vorhanden ist.

Hat jemand eine Idee, woran das liegen könnte? Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

Vielen Dank im Voraus für eure Hilfe.

Gruß ukyo
 
Zuletzt bearbeitet von einem Moderator:
Moin ukyo,

versuch es so:
SQL:
Select  p.Nachname, p.Vorname, p.Personalnr, z1.inhalt AS Kuendigungsdatum, z2.inhalt AS Auszahlungsart
FROM Personal AS p
LEFT JOIN zusatzfelder_personal AS z1 ON p.personalnr=z1.personalnr and z1.zid="1800045"
LEFT JOIN zusatzfelder_personal AS z2 ON p.personalnr=z2.personalnr and z2.zid="1800066"
;

Grüße
Biber
 
Zuletzt bearbeitet von einem Moderator:
Zurück