Auto-jointure récursive SQL Server : une méthode simple
Dans la gestion de bases de données, l'auto-jointure récursive est une technologie qui permet aux tables de s'auto-joindre plusieurs fois, capable de parcourir des données hiérarchiques. Dans SQL Server, cela peut être réalisé via des requêtes récursives.
Considérons le scénario suivant : Nous avons un tableau appelé "Personne" avec les colonnes suivantes :
<code>PersonID | Initials | ParentID</code>
Le tableau représente une hiérarchie où chaque personne a une colonne « Initiales » et peut avoir un « ParentID » faisant référence à une autre personne.
Pour effectuer une auto-jointure récursive sur la table "Personne", nous pouvons utiliser une expression de table commune (CTE) comme indiqué ci-dessous :
<code class="language-sql">WITH q AS ( SELECT * FROM Person WHERE ParentID IS NULL UNION ALL SELECT m.* FROM Person m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q</code>
Dans ce CTE :
Afin de conserver l'ordre de l'arbre, vous pouvez ajouter des conditions de tri dans la requête récursive, comme suit :
<code class="language-sql">WITH q AS ( SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM Person 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 Person m JOIN q ON m.parentID = q.PersonID ) SELECT * FROM q ORDER BY bc</code>
Vous pouvez contrôler l'ordre des éléments frères dans la hiérarchie en modifiant la condition ORDER BY.
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!