-
 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.
-
Entschuldige, man kann sich ja mal vertun (tippfehler), aber es ist immer gut, weitere Fachleute zu haben.
-
Hier eine kleine Übersicht über Jpins:
http://www.muhmann.de/doku/1138725058sql_join.doc
mfg. Ludger
-
meine SQL - Anweisung müsste dann in etwa so lauten (denke ich mal):
PHP-Code:
SELECT
a.LBTNR, a.LBLIEF, a.LBRAMP, b.ARTBZ, a.LBBET§, a.BENUMM, c.AKDATU
FROM yyy/BESTXXC a
LEFT OUTER JOIN xxx/TSSXX b ON a.LBTNR = b.ARTNR
LEFT OUTER JOIN xxx/WARKTOXX c ON a.BENUMM = c.AUFKTO AND DIGITS(a.BEPOS) = c.BELPOS
ORDER BY a.LBTNR
Mit dieser Anweisung erhalte ich dann aber "33266"-Sätze
-> in der Datei (a) BESTMXXC sind aber nur "32781"
woher kommen dann die zusätzlich 485 Sätze ?!?!?!?
-
Sind vielleicht in einer der left join dateien für den Zugriffsschlüssel mehr als 1 Satz vorhanden ?
Z.b.
1 Header Satz mit 3 Detail Sätzen per left join verknüpft = 3 Sätze, obwohl im Header nur 1 Satz ist.
Ansonsten kann man sich die joins übrigens auch sehr gut als Schnittmenge vorstellen...
A Inner join B = Element ist in A und B vorhanden
A left join B = Element ist in A, wenn es in B vorhanden ist wird b mitselektiert, sonst kommen NULL Werte
A Exception Join B = Element ist in A aber nicht in B
Gruß
Rince
-
Wenn du eine 1:N-Beziehung hast, gibt es eben pro 1 Satz N Informationen.
Wenn du eine 1:1-Beziehung hast, must du auch die Schlüssel entsprechend prüfen.
Similar Threads
-
By mk in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 13-07-12, 08:53
-
By moskito in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 30-08-06, 17:30
-
By steven_r in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 08-08-06, 09:34
-
By desti82 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-07-06, 15:25
-
By mikex01 in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 21-04-06, 16:11
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks