Requête récursive dans SQL Server
Pour récupérer les produits correspondants regroupés par leur ID de produit minimum, une requête récursive peut être utilisée. Cette requête parcourt une table, traverse les relations Product_ID et accumule les résultats dans une table de groupes distincte. La structure récursive garantit que toutes les correspondances sont identifiées et incluses dans les résultats.
Solution :
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS 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
Dans cette requête, le CTE est une définition récursive qui identifie le Product_ID minimum pour chaque groupe. La requête commence par sélectionner les Product_ID qui n'ont pas de Product_Id correspondant, créant ainsi les groupes initiaux. Dans l'étape récursive, la requête joint le CTE à la table des correspondances pour identifier les Product_ID correspondants et les ajouter aux groupes. Ce processus se poursuit jusqu'à ce que toutes les correspondances soient traitées.
Le résultat final est une table nommée groups qui contient le MIN Product_ID pour chaque groupe, ainsi que tous les Product_ID qui appartiennent à ce groupe. Cette structure permet des requêtes efficaces sur les relations et les regroupements de produits.
Remarque :
Pour contrôler la profondeur de récursion, utilisez la clause OPTION(MAXRECURSION n), en remplaçant n par le niveau de récursion maximum souhaité.
Exemple : SQL Fiddle Démo
https://www.sqlfiddle.com/#!18/c772e/11
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!