[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    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

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Ohne geprüft zu haben
    PHP-Code:
    Select datei1.Kundennrdatei1.adressecoalesce(datei2.email' ')
    from datei1
    left join datei2 on datei1
    .kundennr datei2.kundennr
    where datei2
    .typ 
    Gruß
    Ronald

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.237
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    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

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.237
    Jetzt haben wir schon Alternative 3 + 4.
    Gibt's noch weitere?

    Ronalds Lösung ist zumindest die einzige, die definitiv nicht funktioniert.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Danke, habe die or is null Variante gewählt.GG

  8. #8
    Registriert seit
    May 2002
    Beiträge
    1.121
    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

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.237
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von Pikachu Beitrag anzeigen
    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

  1. SQL mit Update + Join
    By Harald.Wallukat in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 06-12-13, 09:37
  2. LEFT OUTER JOIN
    By GS in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-11-02, 08:51
  3. Join File
    By muadeep in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 05-07-02, 10:37
  4. Join-Files optimieren
    By KB in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 01-08-01, 09:28
  5. SQL und AS/400 JOIN
    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
  •