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
Libérer: 2025-01-15 11:30:44
original
562 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

Résultats

La requête renvoie les résultats suivants :

<code>Id     Name       Path
2      Laptops    Business,Laptops</code>
Copier après la connexion

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!

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