-
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
-
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
-
From c join a on ...
hat funktioniert, DANKE!!
-
Die Dokumentation läßt ... T1, T2 ... JOIN T3 ... aber zu, und STRSQL und STRQMQRY auf V5R4 können's auch.
-
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.
-
Quelle ?
Zitat von Fuerchau
Laut SQL-Standard gibt es nur entweder/oder.
-
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
-
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?
-
Zitat von Fuerchau
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.
-
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 von Fuerchau
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?
-
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.
Similar Threads
-
By Miles in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 26-10-16, 14:40
-
By dibe in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 20-01-16, 10:30
-
By KingofKning in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 17-11-14, 14:52
-
By GS in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 21-11-02, 08:51
-
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