Maison >base de données >tutoriel mysql >Comment puis-je récupérer efficacement des données hiérarchiques à partir d'une table auto-référencée dans SQL Server 2005 ?

Comment puis-je récupérer efficacement des données hiérarchiques à partir d'une table auto-référencée dans SQL Server 2005 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 08:48:11293parcourir

How Can I Efficiently Retrieve Hierarchical Data from a Self-Referencing Table in SQL Server 2005?

Naviguer dans les données hiérarchiques dans SQL Server 2005

Récupérer des données hiérarchiques à partir de SQL Server 2005 peut être difficile, en particulier lorsqu'il s'agit d'un auto-référencement tableau où les enregistrements des enfants pointent vers les identifiants de leurs parents. Bien que les vues et les requêtes complexes soient couramment utilisées, elles manquent souvent d'élégance et d'efficacité.

Une solution exploite une expression de table commune (CTE) pour construire la structure hiérarchique et générer un chemin pour chaque élément. Cette approche implique la création d'un CTE nommé Parent qui commence par la sélection des nœuds racine (ParentID est NULL) et de leurs noms comme chemin. Il ajoute ensuite de manière récursive des nœuds enfants, concaténant leurs noms au chemin parent.

Le code suivant illustre cette approche :

CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));

INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');

WITH Parent AS
(
    SELECT
        ID,
        ParentID,
        Name AS Path
    FROM
        tblHierarchy
    WHERE
        ParentID IS NULL

    UNION ALL

    SELECT
        TH.ID,
        TH.ParentID,
        CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
    FROM
        tblHierarchy TH
    INNER JOIN
        Parent
    ON
        Parent.ID = TH.ParentID
)
SELECT * FROM Parent

Ce CTE crée une table hiérarchique avec une colonne supplémentaire Chemin qui contient le chemin complet vers chaque nœud. Le résultat de la requête sera :

ID  ParentID    Path
1   NULL        1
2   NULL        2
3   NULL        3
4   1       1/1.1
5   1       1/1.2
6   4       1/1.1/1.1.1

Cette approche fournit un moyen propre et efficace de récupérer des données hiérarchiques à partir d'une table auto-référencée dans SQL Server 2005. Elle élimine le besoin de requêtes manuelles complexes et permet navigation plus facile dans la hiérarchie.

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