Db2 unterstützt in Rekursionen kein Join mit On


Db2 (LUW und z) haben interessante Einschränkungen bei rekursiven With-Klauseln (siehe: Dokumentation). Die Fehlermeldung in ihrer ganzen Pracht:

The fullselect of the recursive common table expression name must be the UNION of two or more fullselects and cannot include column functions, GROUP BY clause, HAVING clause, ORDER BY clause, or an explicit join including an ON clause.

Eine davon ist, dass die On-Klausel bei Joins im rekursiven Zweig nicht verwendet werden kann. Das ist jedoch bei der Arbeit mit Hierarchien sehr oft notwendig.

WITH prev (id, parent) AS (
  SELECT t.id, t.parent
    FROM hierarchy t
   WHERE t.id = ?
UNION ALL
  SELECT t.id, t.parent
    FROM hierarchy t
    JOIN prev ON t.parent = prev.id
)
…

Im Falle eines Inner-Joins kann man diese Limitierung einfach umgehen, indem man auf einen Cross-Join mit der Komma-Syntax (,) ausweicht und die On-Bedingungen in den Where-Klausel verschiebt.

WITH prev (id, parent) AS (
  SELECT t.id, t.parent
    FROM hierarchy t
   WHERE t.id = ?
UNION ALL
  SELECT t.id, t.parent
    FROM hierarchy t
       , prev
   WHERE t.parent = prev.id
)
…

In diesem trivialen Beispiel wurde das Schlüsselwort Join durch ein Komma (,) ersetzt und On durch Where.

Betroffene Produkte und Versionen

BigQuery 2025-09-02Db2 (LUW) 12.1.2MariaDB 12.0.2MySQL 9.3.0Oracle DB 23.9PostgreSQL 17SQL Server 2022SQLite 3.50.0Rekursives With + Join + OnRekursives With + „,“-Join + Where

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS, um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Neuigkeiten Abonnieren

Markus Winands MailinglistenMarkus Winands RSS-FeedMarkus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf TwitterMarkus Winand auf Bluesky
Copyright 2015-2025 Markus Winand. Alle Rechte vorbehalten.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO