Hallo,
das sehe ich anders, leztlich werden in der where klausel nur datensätze der einzelnen tabellen gefiltert, bevor der left join ausgeführt wird. die rechte tabelle des left joins könnte praktisch leer sein und er sollte immer noch alle datensätze der linken tabllen anzeigen.
Nein. Die allgemeine Syntax ist:
SELECT Feldliste FROM Tabellenausdruck WHERE Kriterien
wobei:
Tabellenausdruck:= Ein Ausdruck, der eine oder mehrere Tabellen kennzeichnet, aus denen Daten abgerufen werden. Der Ausdruck kann ein einzelner Tabellenname sein, ein Name einer gespeicherten Abfrage oder ein zusammengesetzter Name, der sich aus einer Verknüpfung (INNER JOIN, LEFT JOIN oder RIGHT JOIN) ergibt.
Kriterien:= Ein Ausdruck mit Kriterien, die Datensätze erfüllen müssen, damit sie in das Abfrageergebnis aufgenommen werden.
Mit "Datensätze" sind dabei die Datensätze gemeint, welche aus dem Tabellenausdruck hervorgehen. Im Tabellenausdruck kann es eine WHERE-Klausel nur dann geben, wenn es sich dort um Unterabfragen handelt.
So könnte, meiner Meinung nach, die Lösung des Problems aussehen:
SELECT a.*, b.vorname, b.name, b.verantwortlich, c.bezeichnung, c.farbe
FROM
(mitarbeiter AS b LEFT JOIN urlaubdaten AS a ON a.personalnummer = b.personalnummer) LEFT JOIN urlaubarten AS c ON a.artnr = c.artnr
WHERE (a.urlaubvon LIKE '2004-%' OR a.urlaubbis LIKE '2004-%' OR (a.urlaubvon IS NULL AND a.urlaubbis IS NULL))
AND b.firma = 'Firma GmbH' AND b.abteilung = 'Einkauf'
ORDER BY a.personalnummer, a.urlaubvon
viele Grüße
Axel