
Zitat von
Fuerchau
Du solltest dich auch entscheiden ob inner oder left, bei inner können NULL-Werte kommen.
Räusper...Es ist genau anders herum...

Zitat von
muadeep
BINGO !!! -> Mir ist leider immer noch nicht der Unterschied zwischen:
- join,
- left join,
- etc.
klar !!!!!!!
Kann mir jemand dazu vieliecht mal ne kurze "Hilfestellung" geben? (danke)
Ich mach mal ein paar Beispiele:
Datei Auftrag
AufNr KunNr Bstnr .....
1 10 b4711
2 11 b4712
3 12 b4713
Datei Liefadr (abweichende Lieferadresse)
AufNr Adresse
2 Wien
Kunden
Nr Name Adresse
10 Maier Graz
11 Hofer Linz
12 Schmidt München
Anforderung: Liste alle Aufträge mit der tatsächlichen Lieferadresse:
Der Klassiker:
PHP-Code:
select * from Auftrag, LiefAdr, Kunden where Auftrag.AufNr = LiefAdr.Aufnr and Auftrag.KunNr = Kunden.Nr
würde nur liefern:
PHP-Code:
Aufnr KunNr ... Liefadr.... Name Kunden.Adressse
2 11 Wien Hofer Linz
Dieser Select entspricht einem inner Join und könnte auch so geschrieben werden:
PHP-Code:
select * from Auftrag
inner join LiefAdr on Auftrag.Aufnr
inner join Kunden on Auftrag.KunNr = Kunden.Nr
Das Ergebnis wäre das Gleiche.
Ein Inner Join liefert nur dann einen Eintrag, wenn die Verknüpfung erfüllt ist.
Besser für diesen Fall: der LEFT OUTER JOIN
PHP-Code:
select * from Auftrag
LEFT OUTER join LiefAdr on Auftrag.Aufnr
LEFT OUTER join Kunden on Auftrag.KunNr = Kunden.Nr
würde liefern:
PHP-Code:
Aufnr KunNr ... Liefadr.... Name Kunden.Adressse
1 10 - Maier Graz
2 11 Wien Hofer Linz
3 12 - Schmidt München
Für die Darstellung von Null wird "-" verwendet.
Es geht aber besser:
PHP-Code:
select Auftrag.Aufnr, Auftrag.KunNr,
coalesce(Liefadr.Adresse, Kunden.Adresse) as Adresse, Name
* from Auftrag
LEFT OUTER join LiefAdr on Auftrag.Aufnr
LEFT OUTER join Kunden on Auftrag.KunNr = Kunden.Nr
Liefert:
PHP-Code:
Aufnr KunNr ... Adresse.... Name
1 10 Graz Maier
2 11 Wien Hofer
3 12 München Schmidt
Die Definition von coalesce (IBM-Welt value) lautet:
Liefert den erten Wert zurück, der nicht Null ist. Man könnte also die Null-Behandlung auch mit
coalesce(Liefadr.Adresse, ' ') as Adresse umgehen.
Bliebe noch der letzte Join, der Outer bzw. Exception Join:
Liefert nur Sätze von nicht erfolgreichen Verknüfpung zurück.
PHP-Code:
select * from Auftrag
exception join LiefAdr on Auftrag.Aufnr = LiefAdr.Aufnr
Würde die Aufträge 1 und 3 liefern, da es hier keine LiefAdr gibt.
Bookmarks