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 ?
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!