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 ?

Comment les CTE récursifs dans SQL Server peuvent-ils récupérer une catégorie et son chemin d'ancêtre ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-15 11:30:44519parcourir

How Can Recursive CTEs in SQL Server Retrieve a Category and its Ancestor Path?

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!

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