[NEWSboard IBMi Forum]

Thema: SQL-Joins

  1. #1
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005

    SQL-Joins

    Hallo,

    ich stehe gerade etwas auf dem Schlauch bzw. sehe den Wald vor lauter Bäumen nicht.
    Und zwar habe ich 2 Dateien (Datei A und Datei B) mit demselben eindeutigen Key-Feld.
    Jetzt kann es vorkommen, dass zu einem Key in beiden Dateien ein Eintrag existiert oder nur in Datei A oder nur in Datei B.
    Bei einem INNER JOIN erhalte ich ja nur die Sätze, die in beiden Dateien vorkommen. Bei einem LEFT JOIN erhalte ich alle, die in beiden vorkommen plus diejenigen, die nur in Datei A vorkommen. Doch wie muss ich nun joinen, um die Datensätze in allen 3 Varianten zu erhalten ("nur in Datei A vorhanden" plus "in beiden Dateien vorhanden" plus "nur in Datei B vorhanden").

    Vielen Dank,
    KM

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Ohne getestet zu haben eventuell so:
    PHP-Code:
    Select from FileA a
    where exists 
    (Select from FileB B where a.key1 b.key1)
    union all
    Select 
    from FileA c
    where not exists 
    (Select from FileB d where c.key1 d.key1)
    union all
    Select 
    from FileB e
    where not exists 
    (Select from FileA f where e.key1 f.key1

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Wenn Du auf Release 6.1 oder höher bist:

    Code:
    Select  a.*, b.*
    From FileA a Full Outer Join FileB b
       on a.key1 = b.Key1
         and a.Key2 = b.Key2
         and ....
         and a.KeyN = b.KeyN
    vor 6.1

    Code:
       Select a.*, b.*
       From FileA a Left Outer Join FileB b on a.Key1 = b.Key1 ....
    Union
       Select a.*, b.*
       From FileA a Right Outer Join FileB b. on a.Key1 = b.Key1 ....;
    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

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Ich hab's gerade in der IBM-Doku gefunden (ein simulierter Full Outer Join):

    SELECT EMPNO, LASTNAME, PROJNO
    FROM CORPDATA.EMPLOYEE LEFT OUTER JOIN CORPDATA.PROJECT
    ON EMPNO = RESPEMP
    WHERE LASTNAME > 'S'
    UNION
    (SELECT EMPNO, LASTNAME, PROJNO
    FROM CORPDATA.PROJECT EXCEPTION JOIN CORPDATA.EMPLOYEE
    ON EMPNO = RESPEMP
    WHERE LASTNAME > 'S')
    Vielen Dank,
    KM

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    @Birgitta:

    Wir sind leider noch auf V5R4. Aber hoffentlich nicht mehr lange. Es ist schon frustrierend, wenn man sieht was mit den neueren Releases geht, aber mit V5R4 noch nicht.

    Gruß,
    KM

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Wem sagst Du das, ich muss hier alles auf V5R4 herunterwandeln und das noch solange bis der letzte unserer Kunden auf ein höheres Release gegangen ist.

    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich muss z.T. noch mit V5R2 arbeiten, da scheitert der Optimizer noch an ungleichen Definitionen bei numerischen Feldern (decimal->numeric) um Indizes zu verwenden. Ohne Cast geht da nichts.
    Aber man kann trotzdem performante SQL's entwickeln.
    Und andere Datenbanken haben noch SQL92, da geht auch noch nicht viel.
    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

Berechtigungen

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