Maison >base de données >tutoriel mysql >Comment les CTE récursifs peuvent-ils identifier les groupes de produits dans SQL Server en fonction de paires correspondantes ?
Requête récursive dans SQL Server
Une table nommée « correspondances » stocke les paires de produits, où un produit correspond à un autre. L'objectif est de créer un tableau « groupes » qui identifie les groupes de produits composés de tous les produits qui se correspondent. L'ID de groupe doit stocker l'ID de produit minimum dans chaque groupe.
Solution CTE récursive
Pour y parvenir, nous pouvons utiliser une expression de table commune (CTE) récursive comme suit :
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches AS M1 LEFT JOIN matches AS 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 AS C JOIN matches AS M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_ID;
Le CTE trouve récursivement tous les produits qui sont directement ou indirectement liés les uns aux autres. Cela commence par identifier les produits sans produits correspondants (Group_ID est leur propre Product_ID). Ensuite, il récupère tous les produits correspondants pour chaque groupe et les ajoute au CTE. La clause UNION ALL combine les résultats de la requête initiale avec les résultats des itérations suivantes, garantissant que tous les produits correspondants sont trouvés.
La clause ORDER BY Group_ID organise les résultats par ordre croissant d'ID de groupe, offrant ainsi une moyen d'identifier les groupes de produits et leurs membres.
Personnalisation de la profondeur de récursion
À l'aide de Clause OPTION(MAXRECURSION n), nous pouvons contrôler la profondeur de récursion maximale, ce qui permet d'éviter une récursion excessive dans les cas de relations de produits complexes.
Démo
Pour une démonstration détaillée , reportez-vous au SQL Fiddle exemple :
https://www.sqlfiddle.com/#!17/d4e0f/20332
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!