Mailinglisten-Archive |
Marc Logemann wrote: > kann ich mit Mysql (3.22.23) einen LEFT INNER JOIN realisieren, ohne > den nicht soooo performanten syntax: > > select * from table1, table2 where table1.field = table2.field > > zu nehmen?? (da hier erst kartesiches Produkt gebildet wird) Die obige Syntax in die einzige Möglichkeit in SQL einen INNER JOIN zu machen, es ist kein LEFT JOIN, weil ein INNER JOIN symmetrisch ist. Ein LEFT JOIN ist immer asymmetrisch, d.h. die rechten Komponenten können aus dem Join stammende Nullwerte haben. Es wird dabei von einer Datenbank idR auch kein kartesisches Produkt gebildet, wenn table1.field und table2.field Spalten mit Indices sind. Ist dabei table1.field Schlüssel in table1 und table2.field Fremdschlüssel in table1, dann sollte table1.field entweder PRIMARY KEY oder UNIQUE definiert werden und table2.field als INDEX (es sei denn, Du hast eine 1:1 Relation, dann sollte table2.field auch UNIQUE sein, obwohl es sich um einen Fremdschlüssel in eine andere Tabelle handelt). Sobald die Indices vorhanden sind, baut die Datenbankegine in der Regel keine full table scans und damit auch keine kartesischen Produkte mehr. Du möchtest die Ausgabe von EXPLAIN in MySQL lesen und verstehen können. Kristian -- Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00 Using PHP3? See our web development library at http://phplib.netuse.de/ (We have moved! Update your bookmarks!)
php::bar PHP Wiki - Listenarchive