Rolf B: mysql - 2 Queries oder doch eine?

Beitrag lesen

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