Maison > base de données > tutoriel mysql > Comment les CTE récursifs s'exécutent-ils ligne par ligne : une explication étape par étape ?

Comment les CTE récursifs s'exécutent-ils ligne par ligne : une explication étape par étape ?

Patricia Arquette
Libérer: 2024-12-31 11:03:13
original
429 Les gens l'ont consulté

How Do Recursive CTEs Execute Line by Line: A Step-by-Step Explanation?

Exécution de CTE récursives, ligne par ligne

Les expressions de table communes récursives (CTE) sont de puissantes constructions SQL qui permettent des requêtes récursives. Pour comprendre comment ils s'exécutent, considérez-les comme une série d'opérations UNION ALL.

Considérez l'exemple fourni :

DECLARE @tbl TABLE ( 
      Id INT 
    , [Name] VARCHAR(20) 
    , ParentId INT 
);
Copier après la connexion

Ligne 1-2 : Définir la table structure.

Ligne 3-16 : Insérer les enregistrements dans le table.

Ligne 19-24 : Définir le CTE récursif abcd.

Ligne 19 : L'expression d'ancrage définit l'itération initiale du CTE en sélectionnant les enregistrements où ParentId est NULL.

Ligne 20-22 : L'expression récursive étend le CTE en sélectionnant les enregistrements enfants et en concaténant leurs noms avec le chemin du parent dans la colonne Chemin.

Ligne 25 : Sélectionnez dans le CTE abcd pour récupérer le résultat final.

Exécution Étapes :

1. Exécutez l'expression d'ancrage (ligne 19), qui renvoie le résultat suivant :

Id Name ParentId Path
1 Europe NULL Europe
2 Asia NULL Asia

2. Exécutez l'expression récursive (lignes 20-22) en utilisant le résultat de l'expression d'ancrage. Cela donne :

Id Name ParentId Path
3 Germany 1 Europe/Germany
4 UK 1 Europe/UK
5 China 2 Asia/China
6 India 2 Asia/India

3. Répétez l'étape 2 jusqu'à ce qu'aucun enregistrement enfant ne soit trouvé, ce qui donne :

Id Name ParentId Path
7 Scotland 4 Europe/UK/Scotland
8 Edinburgh 7 Europe/UK/Scotland/Edinburgh
9 Leith 8 Europe/UK/Scotland/Edinburgh/Leith

4. Unionnez tous les résultats de chaque itération pour obtenir le résultat final affiché dans l'instruction SELECT (ligne 25).

Pourquoi l'ancre n'est pas répétée :

L'expression d'ancrage définit le point de départ initial de la récursivité. Bien qu'elle soit exécutée à chaque itération, elle est distincte de l'expression récursive, qui étend le jeu de résultats. Ainsi, les enregistrements d'ancrage ne sont inclus qu'une seule fois.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal