[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    393

    with und left outher join

    Hallo zusammen

    ich versuche ein (vereinfacht)

    Code:
    with a as (select ...),
           b as (select ...)
    select f1, f2, case when b.f3 is null then 0 else b.f3 end as f3
      from C, a 
      left outer join b on c.feld = b.feld 
      where ...
    aber er mag den join nicht

    Wie kann ich das lösen?
    Oder geht das und die Syntax ist an anderer Stelle defekt?


    Danke Euch

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Eine Mischung der unterschiedlichen Kodier-Methoden (Auflistung der Tabellen durch Komma getrennt mit Schlüssel in den Where-Bedingungen und Join-Methoden in der From-Anweisung) in der From-Anweisung wird nicht akzeptiert.

    Da ich Deine Where-Bedingungen nicht sehe, verknüpfst Du hier die tabelle C über einen CROSS JOIN (karthesisches Produkt!!!) mit a und b.

    Korrekt müsste es heißen:
    With ...

    Code:
    Select ...
       From C join a on ...
              left outer join b on ...
    Falls C,A nur ein falscher Fehler war, fällt C join a... weg und es bleibt:
    Code:
    From a left outer join b on ...
    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

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    393
    From c join a on ...
    hat funktioniert, DANKE!!

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Die Dokumentation läßt ... T1, T2 ... JOIN T3 ... aber zu, und STRSQL und STRQMQRY auf V5R4 können's auch.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das muss aber nicht so bleiben.
    Laut SQL-Standard gibt es nur entweder/oder. Und was mit V5R4 ging muss ja nicht so bleiben wenn es ein Fehler bzw. nicht Standard ist.
    Die SQL-Empfehlung ist eigentlich immer mit Join zu arbeiten.
    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

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Quelle ?

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Laut SQL-Standard gibt es nur entweder/oder.

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    soweit ich das sehe, kann man in der from clause von der ersten ANSI Spezifikation (SQL 89) eine Liste von Tabellen, Views, Ausdrücken die ein ResultSet liefern angeben. Das wird dann als Cross join interpretiert, der in der where clause eingegrenzt werden kann.

    Mit SQL 92 sind dann die ersten join Konstrukte dazugekommen. Die sind gemeint, wenn man von ANSI join spricht.

    Die old style Variante existiert nebenher und wird es wohl auch weiterhin tun.

    Der Mix aus old style und ANSI ist durchaus legal und geht auch unter V7 noch.
    (select *
    from
    sysibm.sysdummy1 a
    , sysibm.sysdummy1 b
    join sysibm.sysdummy1 c on 1 = 1)

    Ich bin immer für Einfachheit und Klarheit und empfehle die ANSI join Form. (Beide nebeneinander zu verwenden ist nur was für Leute, die Gürtel und Hosenträger tragen.)
    - ANSI join kann alles, was old style kann
    - old style kann nicht alles, was ANSI kann
    => ANSI join ist der Weg!

    Was die Quellen angeht: Leider ist an die offiziellen ANSI SQL Dokus offiziell nur gegen größere Mengen Geldes zu kommen.

    D*B
    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
    In deinem Link finde ich aber genau diese Definition nicht.
    Entweder "a, b, c" oder "a join b join c".
    V5R4 war ja auch vor (gefühlten) 20 Jahren.

    Ich meine Birgitta hat dazu mal irgendwo den Link mit entweder/ohne.

    Das Problem dürfte die inzwischen erhebliche Komplexität der Join-Möglichkeiten sein die eine Kombination der Alt- und Neuvariante nicht mehr zulässt.

    Aber ist es letztlich nicht egal wo es steht, wenn der Syntaxprüfer es einfach nicht mehr zulässt?
    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
    Zitat Zitat von Fuerchau Beitrag anzeigen
    In deinem Link finde ich aber genau diese Definition nicht.
    Entweder "a, b, c" oder "a join b join c".
    V5R4 war ja auch vor (gefühlten) 20 Jahren.
    ... das ist nur die falsche Stelle. Auf Seite 711 der SQL Reference V7R3 ist das erweiterte Syntax Diagramm für den mix zwischen old style und ANSI SQL join und gehen tut das auch.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Steht aber drin:

    FROM table-reference, table-reference, ...
    table-reference kann unter anderem sein: joined-table
    joined-table ist z.B.: table-reference join table-reference on ...

    Egal ist es nicht, es könnte ja ein Fehler im Syntaxprüfer sein. :-)

    Zitat Zitat von Fuerchau Beitrag anzeigen
    In deinem Link finde ich aber genau diese Definition nicht.
    Entweder "a, b, c" oder "a join b join c".
    ...
    Aber ist es letztlich nicht egal wo es steht, wenn der Syntaxprüfer es einfach nicht mehr zulässt?

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    from C, a
    left outer join b on c.feld = b.feld

    Dann ist es ggf. ein Hierarchieproblem und folgendes könnte dann gehen:

    from C
    left outer join b on c.feld = b.feld
    , a
    where ...

    durch den Cross-Join auf a, der erst durch where wieder eingeschränkt wird.
    Aber wie Dieter schon sagt, dies wird dann nur noch schwer nachvollziehbar.
    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

Similar Threads

  1. SQL mit Left outer join
    By Miles in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 26-10-16, 14:40
  2. sql left outer join
    By dibe in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 20-01-16, 10:30
  3. Left join Verständnis Frage
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 17-11-14, 14:52
  4. LEFT OUTER JOIN
    By GS in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 21-11-02, 08:51
  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
  •