phpbar.de logo

Mailinglisten-Archive

[php] MySQL join

[php] MySQL join

Kristian =?iso-8859-1?Q?K=F6hntopp?= kk_(at)_netuse.de
Fri, 01 Oct 1999 13:51:54 +0200


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