phpbar.de logo

Mailinglisten-Archive

Verstaendnisproblem bei JOIN

Verstaendnisproblem bei JOIN

Michael Bergbauer mysql-de_(at)_lists.bttr.org
Mon, 13 May 2002 14:45:02 +0200 (CEST)


On 13-May-2002 Guenther Theilen wrote:
> Moin allerseits,
> 
> anscheinend habe ich bei der Verknüpfung von Tabellen irgendwas falsch
> verstanden. Ich habe eine Tabelle, die Orte nach Land, Bundesland,
> Region, Gebiet ordnet.
> Aufbau: id | parent | name
> Wobei parent immer auf den zugehörigen, übergeordneten Eintrag verweist.
> Der Eintrag für das Bundesland "Niedersachsen" hat also zum Beispiel bei
> parent den Wert für den Eintrag "Deutschland".
> Alle Länder haben parent=0, da es dort keine übergeordneten Eintraege
> gibt.
> Soweit, so gut.
> Jetzt möchte ich alle Länder und Bundesländer aus der Tabelle holen:
> 
> SELECT id, parent, name FROM tabelle WHERE parent="0"
> gibt mir die Länder
> 
> SELECT a.id, a.parent, a.name 
> FROM tabelle AS a, tabelle AS b 
> WHERE a.parent=b.id AND b.parent="0"
> gibt mit die Bundesländer
> 
> SELECT a.id, a.parent, a.name 
> FROM tabelle AS a, tabelle AS b 
> WHERE (a.parent='0') OR (a.parent=b.id AND b.parent='0')
> gibt nicht Länder und Bundesländer sondern totalen Unfug
> 
> Wo ist da mein Denkfehler?

Lass mich raten: dein Ergebnis besteht aus allen Laendern sehr oft + die
Bundeslaender?

Ganz einfach: du machst da oben einen Cross Join, d.h., due erzeugst temporaer
eine Tabelle, die aus tabelle X tabelle besteht,und mit der Where-Bedingung
streichst du da alle raus, die eben die Bedingung nicht erfuellen. Durch das OR
gibts aber ein paar dumme Effekte - z.B  alle Zeilen aus tabelle X tabelle,
die a.parent=0 erfuellen (das sind pro eintrag in a, der die Bedingung erfuellt
soviele Zeilen, wie tabelle Zeilen enthaelt!) gelangen ins Result der Query.


Michael

-- 
michael Bergbauer <michael_(at)_noname.franken.de>
Use your idle CPU cycles.
See http://www.distributed.net and win $ 1 000.
Visit our mud Geas at geas.franken.de Port 3333

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive