"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment utiliser le regroupement de requêtes récursif pour faire correspondre les produits dans SQL Server?

Comment utiliser le regroupement de requêtes récursif pour faire correspondre les produits dans SQL Server?

Publié le 2025-04-19
Parcourir:597

How to Group Matched Products in SQL Server Using Recursive Queries?

SQL Server: requête récursive pour le regroupement des produits correspondants

dans une table de base de données relationnelle nommée "Matches", chaque enregistrement représente une correspondance entre deux produits. L'objectif est de créer une table "Groupes" qui capture ces matchs dans une structure hiérarchique. Plus précisément, la colonne "Group_ID" doit stocker l'ID de produit minimum parmi ceux qui appartiennent au même groupe.

pour y parvenir, nous pouvons tirer parti de la puissance des requêtes récursives dans SQL. Une requête récursive effectue plusieurs cycles d'opérations sur les mêmes données. Voici une solution qui utilise une expression de table commune (CTE) pour suivre les opérations récursives:

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

Le cas de base de la récursivité est lorsqu'un produit n'a pas de correspondance, auquel cas il forme son propre groupe. Ceci est capturé dans la première partie du CTE.

    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

La partie récursive du CTE trouve tous les produits correspondants pour chaque groupe. Il ajoute de manière itérative ces produits correspondants au groupe.

    SELECT
        C.Group_ID,
        M.matching_Product_Id
    FROM CTE C
        JOIN matches M
            ON C.Product_ID = M.Product_ID

Enfin, nous pouvons récupérer les résultats dans l'ordre hiérarchique en triant le CTE par la colonne "group_id".

SELECT * FROM CTE ORDER BY Group_ID

Ce tableau récursif produit efficacement le groupe de produits de produits dans le groupe "dans le groupe". La relation hiérarchique est capturée par la colonne "Group_ID", garantissant que chaque ligne reflète un groupe de produits distinct.

En tirant parti des capacités récursives de SQL Server, nous pouvons extraire efficacement des modèles hiérarchiques complexes et des données liées au groupe dans des structures de base de données complexes.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3