Heim >Datenbank >MySQL-Tutorial >Können mehrere CTEs, einschließlich rekursiver, in einer einzigen SQL-Abfrage kombiniert werden?

Können mehrere CTEs, einschließlich rekursiver, in einer einzigen SQL-Abfrage kombiniert werden?

Susan Sarandon
Susan SarandonOriginal
2025-01-05 05:19:39472Durchsuche

Can Multiple CTEs, Including Recursive Ones, Be Combined in a Single SQL Query?

Verbinden mehrerer CTEs in einer einzigen SQL-Abfrage

Ist es möglich, mehrere Common Table Expressions (CTEs) in einer einzigen Abfrage zu kombinieren? Das Ziel besteht darin, ein Ergebnis ähnlich dem folgenden zu erzielen:

WITH cte1 AS (
...
),
WITH RECURSIVE cte2 AS (
...
),
WITH cte3 AS (
...
)
SELECT ... FROM cte3 WHERE ...

Diese Abfrage umfasst einen rekursiven CTE und zwei nicht rekursive CTEs.

Lösung:

Um mehrere CTEs in einer einzigen Abfrage zu verbinden:

  • Verwenden Sie das Schlüsselwort WITH einmal am Anfang.
  • Wenn CTEs rekursiv sind, fügen Sie das Schlüsselwort RECURSIVE einmal am Anfang hinzu, auch wenn nicht alle CTEs rekursiv sind.

Aktualisiert Abfrage:

WITH RECURSIVE
  cte1 AS (...)         -- can still be non-recursive
, cte2 AS (SELECT ...
           UNION ALL
           SELECT ...)  -- recursive term
, cte3 AS (...)
SELECT ... FROM cte3 WHERE ...

Wichtige Punkte:

  • Das Schlüsselwort RECURSIVE ermöglicht einem CTE die Selbstreferenz.
  • Mit REKURSIV, die Reihenfolge der WITH-Klauseln spielt keine Rolle.
  • CTEs, die es nicht sind auf die im äußeren SELECT verwiesen wird, wird möglicherweise nicht ausgeführt.

Das obige ist der detaillierte Inhalt vonKönnen mehrere CTEs, einschließlich rekursiver, in einer einzigen SQL-Abfrage kombiniert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn