Zitat 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 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 AuftragLiefAdrKunden 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.AufnrAuftrag.KunNr
 
coalesce(Liefadr.AdresseKunden.Adresse) as AdresseName
 
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.