Maison >base de données >tutoriel mysql >Comment les auto-jointures récursives dans SQL Server peuvent-elles récupérer des données hiérarchiques ?

Comment les auto-jointures récursives dans SQL Server peuvent-elles récupérer des données hiérarchiques ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-15 12:15:47594parcourir

How Can Recursive Self-Joins in SQL Server Retrieve Hierarchical Data?

Auto-jointures récursives SQL Server : navigation dans les données hiérarchiques

Les auto-jointures récursives de SQL Server offrent une méthode puissante pour parcourir les structures de données hiérarchiques. Ceci est particulièrement utile lorsqu'il s'agit de relations parent-enfant au sein d'une seule table.

Considérons un Categories tableau avec ces colonnes :

  • Id
  • Name
  • ParentId

Une auto-jointure récursive nous permet d'extraire les relations hiérarchiques au sein de ce tableau, englobant les niveaux de catégories imbriqués.

Exemple illustratif :

Imaginez cette hiérarchie de catégories :

<code>- Business Laptops
    - Gaming Laptops
        - Ultrabooks
            - Compact Ultrabooks</code>

Pour récupérer « Business Laptops » et ses catégories parentes à l'aide d'une expression de table commune récursive (CTE), nous pouvons utiliser cette requête :

<code class="language-sql">;WITH CTE AS (
    SELECT id, name, name AS path, parent_id
    FROM Categories
    WHERE parent_id IS NULL
    UNION ALL
    SELECT t.id, t.name, CAST(cte.path + ',' + t.name AS VARCHAR(100)), t.parent_id
    FROM Categories t
    INNER JOIN CTE ON t.parent_id = CTE.id
)
SELECT id, name, path
FROM CTE
WHERE name = 'Business Laptops';</code>

Le résultat de cette requête serait :

<code>id      name                path
1       Business Laptops      Business Laptops</code>

Les auto-jointures récursives offrent un moyen efficace de gérer et de récupérer des données à partir de structures hiérarchiques complexes, en accédant aux informations associées sur plusieurs niveaux.

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