Daniel Petratsch: Mysql Mehrere Joins in einem Statement, welche Reihenfolge ?

Beitrag lesen

Hallo!

Mir wäre sehr geholfen, wenn mir jemand einen Tipp geben könnte wie die Joins eigentlich abgearbeitet werden, solbald mehrere in einem Statement vorkommen. Ich habe folgende Mysql Abfrage:

--------------------------------------->

SELECT a.artikel_nr,a.ueberschrift,a.kurzbeschreibung,a.verkaufspreis,a.aktionspreis,a.in_aktion,a.verkaufseinheit, a.lieferzeit,a.ordersatz,b.vorschau,b.dateiname,c.firmenname,c.plz,c.ort
FROM
artikel AS a
LEFT JOIN artikelbilder AS b
ON (a.artikel_nr = b.artnr_intern)
INNER JOIN lieferantendaten AS c
ON (a.ordersatz = c.ordersatz)
WHERE (a.kategorie = 25) AND (b.vorschau = 1)
ORDER BY a.ueberschrift ASC

--------------------------------------->

Also nun muss ich natürlich noch dazu sagen, wass ich eigentlich erreichen will:

Ich habe 3 Tabellen, in der 1. sind Artikel gespeichert, in der 2. sind die zugehörigen Bildnamen und in der letzten die zugehörigen Lieferanten. Da ich nun alle Informationen brauche ist das meines Denkens nach am performantesten, wenn ich es in einer einzigen Abfrage mache. Soweit sogut - funktioniert auch ganz prima - aber nur dann wenn auch in der Bilddatenbank ein Eintrag zum Artikel mit der dementsprechenden Artikelnummer (an der gejoined wird) existiert.

Nun verstehe ich aber nicht wieso das so ist, denn theoretisch müsste er zuerst die Tabelle "artikel" mit "artikelbilder" Left Joinen, existiert kein Eintrag in der "artikelbilder" Tabelle, müsste er ja mit einem NULL Feld verknüpfen. Und danach erst findet der Inner Join mit der gerade erhaltenen Tabelle und der "lieferantendaten" Tabelle statt (dieser Key besteht immer).

Es sollte halt so sein, dass wenn kein Bild zum Artikel existiert, der Datensatz trotzdem ausgelesen wird.

Habe ich die Reihenfolge denn nun falsch interpretiert oder worin liegt der Fehler?

Danke und freundliche Grüsse,
Daniel

--
Das ist der ganze Jammer, die Dummen sind immer so sicher und die Gescheiten so voller Zweifel.
[Bertrand Russell]