Répartition de l'exécution récursive des CTE
Les CTE récursifs suivent un processus d'exécution étape par étape qui produit finalement l'ensemble de résultats souhaité. Décomposons chaque étape ligne par ligne pour une meilleure compréhension.
AVEC abcd AS (
Cette ligne déclare le CTE récursif nommé "abcd". Elle sert de table temporaire qui accumule les résultats.
-- ancre
La première L'instruction select fait office d'ancre, sélectionnant les lignes qui répondent à la condition d'ancrage. Dans ce cas, elle récupère les lignes de @tbl avec un ParentID nul. Cela aboutit à la population initiale du CTE "abcd".
SELECT id, Name, ParentID, CAST(Name AS VARCHAR(1000)) AS Path
Cette ligne extrait l'ID, le nom, ParentID, et une colonne calculée "Path" qui contient initialement uniquement le Nom de la ligne.FROM @tbl
Les données proviennent de la table temporaire @tbl.OÙ ParentId EST NULL
Cette condition filtre les lignes où le ParentID est nul, sélectionnant efficacement les lignes de niveau supérieur.UNION ALL
Cet opérateur combine l'instruction de sélection d'ancrage avec le membre récursif.--membre récursif
La deuxième instruction select forme le membre récursif, qui effectue des itérations basé sur l'ancre.SELECT t.id, t.Name, t.ParentID, CAST((a.path '/' t.Name) AS VARCHAR(1000)) AS "Path"
Cette ligne récupère l'ID, le nom, le ParentID et une colonne modifiée "Path" qui concatène le "Path" du parent avec le Nom de la ligne actuelle.FROM @tbl AS t
Les données proviennent de la table temporaire @tbl, alias "t."JOIN abcd AS a
Cette jointure relie les lignes en "t" avec celles de l'existant "abcd" CTE en utilisant la colonne ParentID.ON t.ParentId = a.id
La condition de jointure garantit que les lignes enfants correspondent à leurs lignes parents.SELECT * FROM abcd
Enfin, cette instruction renvoie le Ensemble de résultats complet du CTE récursif, y compris toutes les itérations.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!