Maison >base de données >tutoriel mysql >Plusieurs CTE, y compris les récursifs, peuvent-ils être combinés dans une seule requête SQL ?

Plusieurs CTE, y compris les récursifs, peuvent-ils être combinés dans une seule requête SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 05:19:39515parcourir

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

Connexion de plusieurs CTE dans une seule requête SQL

Est-il possible de combiner plusieurs expressions de table communes (CTE) au sein d'une seule requête ? L'objectif est d'obtenir un résultat similaire à :

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

Cette requête intègre un CTE récursif et deux CTE non récursifs.

Solution :

Pour connecter plusieurs CTE en une seule requête :

  • Utilisez le mot-clé AVEC une fois au début.
  • Si des CTE sont récursifs, ajoutez le mot-clé RECURSIVE une fois au début, même si tous les CTE ne sont pas récursifs.

Mise à jour Requête :

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

Points clés :

  • Le mot-clé RECURSIVE permet à un CTE de s'auto-référencer.
  • Avec RECURSIVE, l'ordre des clauses WITH devient sans conséquence.
  • CTE qui ne sont pas référencés dans le le SELECT externe peut ne pas être exécuté.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn