-
Left join Verständnis Frage
Hallo *all,
ich hab da mal ne Frage:
Ich muß eine Datei erstellen in der die Kunden mit einer bestimmtem E-Mail Adresse angezeigt werden.
Aufbau Datei 1:
Kunden-Nr Anschrift etc.
0001 Karnickelhausen
0002 Maulwufshügel
0003 Spechtbau
Aufbau Datei 2:
Kunden-Nr. E-Mail Adresse Typ
0001 1.Karnickel@Karnickelhausen 1
0001 2.Karnickel@Karnickelhausen 2
0001 3.Karnicke@Karnickelhausen 3
0002 1.Maulwurf@Maulwufshügel 1
0002 2.Maulwurf@Maulwufshügel 2
Jetzt soll die Ausgabe so aussehen:
0001 Karnickelhausen 1.Karnickel@Karnickelhausen 1
0002 Maulwufshügel 1.Maulwurf@Maulwufshügel 1
0003 Spechtbau
Dachte ich kein Problem, machst Du ein left join und bis dabei.
select * from datei1, datei2 on kunden-Nr = Kunden-Nr. where datei2.typ = 1
sobald ich aber in Datei2 die Einschränkung auf Typ=1 mache, bekomme ich nur noch Sätze mit existierender E-Mail Adresse angezeigt. Der Spechtbau ohne Adresse fällt raus.
Ohne die Einschränkung habe ich auch den Spechtbau drin aber dafür natürlich alle Sätze so oft wie E-Mail Einträge.
Wie müßte dann die Abfrage richtig lauten um alle Sätze mit E-Mail Typ1 und auch die Sätze ohne E-Mail zu sehen?
GG
-
Ohne geprüft zu haben
PHP-Code:
Select datei1.Kundennr, datei1.adresse, coalesce(datei2.email, ' ') from datei1 left join datei2 on datei1.kundennr = datei2.kundennr where datei2.typ = 1
Gruß
Ronald
-
Sobald auf eine Joindatei mit einem fixen Wert verglichen wird, entsteht daraus sofort ein Inner-Join.
Alternative1:
where datei2.typ = 1 or datei2.typ is null
Alternative2:
where coalesce(datei2.typ, 1) = 1
-
select *
from datei1 d1 left outer join
( select * from datei2
where type = 1) d2
on d1.kundeNr = d2.kundeNr
den subselect kann man je nach gusto auch als CTE vernageln
D*B
-
Nimm mal die Einschränkung nach dem Typ mit in das ON und probiers mal so:
SELECT * FROM D1 LEFT OUTER JOIN D2 ON D1.KUNDE=D2.KUNDE AND D2.TYP=1
-
Jetzt haben wir schon Alternative 3 + 4.
Gibt's noch weitere?
Ronalds Lösung ist zumindest die einzige, die definitiv nicht funktioniert.
-
Danke, habe die or is null Variante gewählt.GG
-
Hm,
gerad mal gestetst. Geht inder Form wirklich nicht.
Geht nur, wenn man den where auf den Typ weg lässt, und Kunde 3 zB gar nicht in Datei2 ist
Gruß
Ronald
-
Tja, die is null Variante fällt dann auf die Nase wenn es einen Eintrag in Datei2 <> Typ 1 gibt. Sprich Typ2 gibt es, aber nicht Typ1 den ich haben will.
Werde jetzt mal die andere Variante probieren
GG
-
Ja stimmt, die beiden anderen Wege sind korrekt da die Datei2 auf den Typ 1 eingeschränkt und die Abfrage im Where entfällt.
Wobei die "on ... Typ = 1" mit Index die schnellste sein wird.
-
Zitat von Pikachu
Nimm mal die Einschränkung nach dem Typ mit in das ON und probiers mal so:SELECT * FROM D1 LEFT OUTER JOIN D2 ON D1.KUNDE=D2.KUNDE AND D2.TYP=1
Die Variante scheint mich glücklich zu machen.
Danke.
GG
Similar Threads
-
By Harald.Wallukat in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 06-12-13, 09:37
-
By GS in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 21-11-02, 08:51
-
By muadeep in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 05-07-02, 10:37
-
By KB in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 01-08-01, 09:28
-
By HoScHiE in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 11-07-01, 07:57
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