Auto-jointures récursives dans SQL Server
Dans SQL Server, une auto-jointure récursive vous permet de naviguer dans des structures de données hiérarchiques en joignant un table à elle-même plusieurs fois en fonction d'une relation parent-enfant.
Pour effectuer une auto-jointure récursive pour récupérer les enregistrements liés à un élément spécifique hiérarchie, la stratégie suivante peut être utilisée :
Utilisation d'une expression de table commune (CTE)
Une CTE, également connue sous le nom de requête récursive, peut être utilisée pour implémenter une auto-jointure récursive. L'idée principale est de définir une requête d'ancrage qui sélectionne les enregistrements qui répondent à un critère spécifique (par exemple, aucun parent), puis d'utiliser une sous-requête récursive pour ajouter les enregistrements enfants aux résultats :
WITH q AS ( SELECT * FROM mytable WHERE ParentID IS NULL UNION ALL SELECT m.* FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q
En ajoutant un ordre condition à la sous-requête récursive, l'ordre de l'arborescence peut être préservé :
WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM mytable m WHERE ParentID IS NULL UNION ALL SELECT m.*, q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM mytable m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc
Considérations :
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!