Hallo Jörg,
d.h. wenn m.Del den Wert 1 hat, kannst Du auf alle drei LEFT JOIN Ergebnisse verzichten, brauchst aber die Werte aus der m-Tabelle trotzdem?
WHERE wirkt auf das Ergebnis des JOIN, und ON wirkt auf die zugeJOINte Table. Probier's mal so:
SELECT
m.ID,
usw.
FROM
table1 m
LEFT JOIN table2 dg ON m.Del != 1 AND dg.ID = m.ID AND dg.del != 1
LEFT JOIN table3 s ON m.Del != 1 AND s.ID = m.ID
LEFT JOIN table4 mn ON m.Del != 1 AND mn.MID = s.MID AND mn.MID = 4780
WHERE
m.ID IN(1094,1095)
Man müsste Explains laufen lassen, um zu prüfen, ob die Reihenfolge der Abfragen im ON eine Relevanz für den Query-Plan hat oder ob die DB das sinnvoll optimiert. Zumindest im dritten LEFT JOIN wäre es nämlich sinnvoll, bei s.MID != 4780 gar nicht erst die Tabelle anzugucken, und wenn der Server strikt von links nach rechts abfragt, wäre
ON m.Del != 1 AND s.MID = 4780 AND mn.MID = s.MID
wohl performanter. Das kann man aber vermutlich nur mit einer großen DB und einer wilden Abfrage auf zufällige Daten wirklich feststellen.
Rolf
sumpsi - posui - obstruxi