Ich bin mir nicht sicher, aber DeddyHs Vorschlag müsste falsch sein.
Bei einem Fehlzeitraum 2008-11-03 bis 2008-11-07 ergibt sich aus
SQL-Code:
A.Datum_von >= '2008-11-02'
AND A.Datum_bis <= '2008-11-05'
Damit wäre beim LEFT OUTER JOIN A.PersonalNr = NULL.
Der Mitarbeiter würde also selektiert werden, obwohl er nicht einsetzbar wäre.
Vorgehensweise:
Code:
Gib mir alle Spalten
aus Tabelle Personal
wo PersonalNr nicht in
( Gib mir alle PersonalNr
aus Abwesenheitsliste
wo Einsatzzeitraum in Fehlzeitraum fällt
)
Mein Vorschlag:
SQL-Code:
SELECT P.*
FROM Personal P
WHERE P.PersonalNr != ALL (
SELECT PersonalNr
FROM abw_liste
WHERE ( datum_von>=VON_WANN AND datum_von<=BIS_WANN ) OR
( datum_bis>=VON_WANN AND datum_bis<=BIS_WANN )
)
Übrigens solltest du Projektionen immer ausschreiben, also nicht den *-Operator nutzen.
LG,
Xong
PS: Ich hoffe, ich habe keine Fehler gemacht.