Maison >base de données >tutoriel mysql >Comment les auto-jointures récursives dans SQL Server peuvent-elles récupérer efficacement des données hiérarchiques ?
La navigation dans les structures de données hiérarchiques peut être complexe. L'expression de table commune (CTE) récursive de SQL Server offre une solution puissante pour parcourir ces structures arborescentes à l'aide d'auto-jointures.
Considérons un modèle de données hiérarchique typique, tel qu'une table de catégories :
<code class="language-sql">CREATE TABLE Categories ( Id int PRIMARY KEY, Name nvarchar(MAX), ParentId int FOREIGN KEY REFERENCES Categories(Id) );</code>
Cette conception permet des catégories imbriquées de profondeur arbitraire. La visualisation de cette hiérarchie (comme indiqué ci-dessous) met en évidence la difficulté de récupérer des lignées complètes avec des requêtes SQL standard.
[Insérer une image de la hiérarchie des catégories]
Un CTE récursif résout élégamment ce problème. La requête suivante montre comment récupérer une catégorie et l'intégralité de son ascendance :
<code class="language-sql">WITH RecursiveCategoryCTE AS ( SELECT c.Id, c.Name, CAST(c.Name AS nvarchar(MAX)) AS Path FROM Categories AS c WHERE c.ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(r.Path + ',' + t.Name AS nvarchar(MAX)) AS Path FROM RecursiveCategoryCTE AS r JOIN Categories AS t ON t.ParentId = r.Id ) SELECT c.Id, c.Name, c.Path FROM RecursiveCategoryCTE AS c WHERE c.Name = 'Business Laptops';</code>
RecursiveCategoryCTE
, commence par sélectionner les catégories racines (où ParentId
est NULL).Categories
, construisant la colonne Path
pour accumuler les noms d'ancêtres.SELECT
filtre la catégorie cible (« ordinateurs portables professionnels ») et son chemin d'ascendance généré.Le résultat serait :
Id | Name | Path |
---|---|---|
12 | Business Laptops | Computers,Laptops,Business Laptops |
Cette technique est précieuse dans de nombreuses applications, notamment :
Cette approche fournit une méthode concise et efficace pour parcourir les données hiérarchiques au sein de SQL Server.
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!