Requête récursive pour établir des groupes de produits dans SQL Server
Une tâche courante dans l'analyse des données consiste à identifier et à regrouper les entités associées. Dans ce scénario spécifique, l'objectif est de traiter un tableau de correspondances de produits et de les stocker dans un tableau séparé, où chaque ligne représente un groupe de produits. Les groupes de produits sont déterminés par la relation de « correspondance » entre les produits.
Pour y parvenir, nous pouvons utiliser une requête récursive utilisant l'expression de table commune (CTE) de SQL Server. Une requête récursive permet à une requête de faire référence à sa propre sortie, permettant ainsi la mise en œuvre de jointures complexes et de structures arborescentes.
Le CTE, nommé « CTE », identifie d'abord les nœuds racines de chaque groupe en sélectionnant le ID de produit minimum pour chaque produit qui n'a pas de produit correspondant. Ensuite, elle se joint de manière récursive à la table des correspondances pour identifier les produits restants dans chaque groupe.
La requête finale récupère les données du CTE et classe les résultats par ID de groupe. En spécifiant la clause OPTION(MAXRECURSION n), nous pouvons contrôler la profondeur maximale de récursion autorisée, garantissant que la requête n'entre pas dans une boucle infinie.
Voici le code SQL de la requête récursive :
;WITH CTE AS ( SELECT DISTINCT M1.Product_ID Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL UNION ALL SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_ID;
En utilisant cette requête récursive, vous pouvez regrouper efficacement les produits en fonction de leurs relations de correspondance et stocker les résultats dans un tableau séparé pour une utilisation ultérieure. analyse.
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!