[NEWSboard IBMi Forum]

Thema: SQL FULL JOIN

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    47

    SQL FULL JOIN

    Hallo Forumsteilnehmer,

    ich möchte mit SQL 2 Dateien verbinden und dabei auch diejenigen Datensätze der Primärdatei in der Ergebnisliste haben, die nicht mit der Sekundärdatei verknüpfbar sind.

    Ich habe daher versucht, auf einer AS400 (Rel. V5R3M0) den Befehl
    select feld1, feld2 from FILEA FULL JOIN FILE2 ON feld1=feldx etc.
    dafür zu verwenden.

    Ich bekomme die Antwort "TOKEN FULL" ungültig.

    Ist FULL JOIN auf der AS400 nicht unterstützt bzw. welche anderen (einfachen) Möglichkeiten gibt es dafür.

    Ich danke euch für euer Infos.

  2. #2
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Wie wäre es mit LEFT OUTER JOIN ?

    Gruß,
    KM

  3. #3
    Registriert seit
    Aug 2006
    Beiträge
    47
    Danke für die Info,

    ohne WHERE-Klausel funktionierts.

    Wenn ich aber in der WHERE-Klausel eine Abfrage Feld Datei A <> Feld Datei B definiere, dann fallen die Datensätze wo die Verknüpfung wegen fehlender Sätze in Datei B nicht erfolgen kann, aus meiner Ergebnisliste heraus.
    zb. Feld Datei A=100; kein verknüpfbarer Satz in Datei B; dann müsste dieser Datensatz doch in der Liste enthalten sein,oder?

    Dh. SQL INNER LEFT JOIN reagiert anders als zB. bei QUERY, wenn ich die Verknüpfungs-Art "2" (mit Primärdatei gleiche Sätze) auswähle.

    Ich danke im voraus.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.874
    Hallo,

    bei Query/400 und Verknüpfung mit Primär-Datei gleich, werden für die nicht gefundenen Sätze in der zweiten Datei Default-Werte (z.B. 0 oder *Blanks) ausgegeben.

    Bei Left Outer Join werden für die Felder in der zweiten Datei, die nicht verknüpft wurden NULL-Werte ausgegeben.
    NULL-Werte sind Werte außerhalb des gültigen Bereichs und können deshalb nicht über die üblichen Vergleichsoperatoren (=, <>) abgefragt werden. Statt dessen muss IS NULL bzw. IS NOT NULL verwendet werden.

    Wenn Du allerdings nur die Sätze ermitteln willst, für die es in der zweiten Seite kein Pendant gibt, würde ich über EXCEPTION JOIN (entspricht mit Primärdatei ungleich in Query/400) verknüpfen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    47
    Besten Dank, Brigitta.
    Die Erklärung mit den NULL-Inhalten hat es mir verständlich gemacht.
    Für meine Auswertung brauche ich zwar eine Abfrage, aber ich werd schon was finden.

    Danke und einen schönen Tag noch

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Du musst dann z.B. folgendes abfragen:

    a.feld=100 and b.feld is null

    Sobald du aus Datei B einen festen Wert abfragst, generierst du automatisch einen Inner Join.

    Wenn du also sowohl als auch benötigst gibts nur folgendes:

    a.feld=100 and (b.feld is null or a.feld<>b.feld)
    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
    Mar 2002
    Beiträge
    5.287
    Hallo,

    coalesce ist dein Freund
    select coalesce(irgendEinNumerischesFeld, 0), coalesce(irgendEinAlfaFeld, " ") ...
    from ... left outer join ...
    sollte es tun, wenn du die coalesce Funktion (liefert den ersten Wert aus der Liste, der nicht null ist) um alle Felder der zweiten Datei drumherum baust.

    mfg

    Dieter Bender


    Zitat Zitat von fpxx Beitrag anzeigen
    Besten Dank, Brigitta.
    Die Erklärung mit den NULL-Inhalten hat es mir verständlich gemacht.
    Für meine Auswertung brauche ich zwar eine Abfrage, aber ich werd schon was finden.

    Danke und einen schönen Tag noch
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    @Dieter
    Dann musst du allerdings auch die Where-Klausel ergänzen:

    where ... coalesce(...) = Wert ...

    sonst klappt das wieder nicht.
    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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    normalerweise würde ich das im View Layer, oder als common table expression oder als geschachtelte Hugo Abfrage machen:
    create view ddd as select ...

    oder with a as (select ...)
    select * from a where ...

    oder select * from (select ...) hugo where ...

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau Beitrag anzeigen
    @Dieter
    Dann musst du allerdings auch die Where-Klausel ergänzen:

    where ... coalesce(...) = Wert ...

    sonst klappt das wieder nicht.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SQL inner join
    By Robi in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 22-06-07, 15:52
  2. SQL left join
    By ahingerl in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 08-12-06, 08:28
  3. SQL - Join mit Bedingung und Update
    By cassi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-11-06, 15:03
  4. SQL JOIN
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-10-06, 07:56
  5. SQL FULL JOIN ???
    By Xanas in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 23-02-06, 10:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •