Maison >base de données >tutoriel mysql >Comment les CTE récursifs dans SQL Server peuvent-ils récupérer une catégorie et son chemin d'ancêtre ?
Requête autoréférentielle utilisant des expressions de table communes récursives (CTE) dans SQL Server
Présentation
Dans les bases de données relationnelles, les requêtes auto-référentielles sont une technique puissante pour parcourir les relations hiérarchiques dans une seule table. SQL Server fournit à cet effet des expressions de table communes (CTE), permettant des requêtes récursives efficaces et expressives.
Question
Considérons un tableau "Catégorie" simplifié avec les colonnes ID, Nom et ParentId. Le tableau prend en charge une hiérarchie indéterminée de catégories, comme le montre l'exemple suivant :
<code>Id Name ParentId 1 Business NULL 2 Laptops 1 3 Asus 2</code>
L'objectif est de construire une requête qui non seulement récupère une catégorie spécifiée (par exemple, « Ordinateurs portables professionnels »), mais fournit également une liste de toutes ses catégories parentes, séparées par des virgules.
Solution : CTE récursif
Pour résoudre ce problème, le CTE récursif peut être utilisé. Le CTE le plus externe définit le point de départ de la récursion, tandis que le terme récursif définit la logique de la hiérarchie étendue :
<code>WITH CTE AS ( SELECT Id, Name, Name AS Path, ParentId FROM Categories WHERE ParentId IS NULL UNION ALL SELECT t.Id, t.Name, cast(cte.Path + ',' + t.Name as varchar(100)), t.ParentId FROM Categories t INNER JOIN CTE ON t.ParentId = CTE.Id )</code>
Requête
Pour récupérer une catégorie spécifiée et sa catégorie parent, nous utilisons une requête simple :
<code>SELECT Id, Name, Path FROM CTE WHERE Name = 'Business Laptops'</code>
Résultats
La requête renvoie les résultats suivants :
<code>Id Name Path 2 Laptops Business,Laptops</code>
Dans cet exemple, « Business Laptops » est un enfant de « Laptops » qui est un enfant de « Business ». La colonne Chemin fournit le chemin hiérarchique complet vers la catégorie racine.
Conclusion
Les CTE récursifs dans SQL Server offrent un moyen élégant et efficace de naviguer dans les relations hiérarchiques dans les tables. En tirant parti de la puissance de la récursivité, des requêtes complexes peuvent être construites pour extraire des informations précieuses à partir de structures de données hiérarchiques.
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!