Maison > base de données > tutoriel mysql > Comment une requête SQL récursive peut-elle regrouper efficacement des produits en fonction de relations de correspondance ?

Comment une requête SQL récursive peut-elle regrouper efficacement des produits en fonction de relations de correspondance ?

Patricia Arquette
Libérer: 2025-01-05 16:50:39
original
294 Les gens l'ont consulté

How Can a Recursive SQL Query Efficiently Group Products Based on Matching Relationships?

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal