"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como usar o agrupamento de consultas recursivas para combinar com os produtos no SQL Server?

Como usar o agrupamento de consultas recursivas para combinar com os produtos no SQL Server?

Postado em 2025-04-19
Navegar:122

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

sql server: consulta recursiva para agrupar produtos correspondentes

em uma tabela de banco de dados relacional denominada "Matches", representa uma correspondência entre dois produtos. O objetivo é criar uma tabela de "grupos" que captura essas correspondências em uma estrutura hierárquica. Especificamente, a coluna "group_id" deve armazenar o ID mínimo do produto entre aqueles que pertencem ao mesmo grupo. Uma consulta recursiva executa várias rodadas de operações nos mesmos dados. Aqui está uma solução que emprega uma expressão de tabela comum (CTE) para rastrear operações recursivas:

com CTE COMO ( Selecione distinto M1.product_id como group_id, M1.product_id Das partidas m1 Junho esquerda Matches M2 Em m1.product_id = m2.matching_product_id Onde m2.matching_product_id é nulo Union All Selecione C.group_id, M.matching_product_id De Cte ​​c Junte -se a Matches m Em c.product_id = m.product_id ) Selecione * FROM ORDEM CTE POR GROUP_ID

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

selecione distinto M1.product_id como group_id, M1.product_id Das partidas m1 Junho esquerda Matches M2 Em m1.product_id = m2.matching_product_id Onde m2.matching_product_id é null

    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

SELECT C.group_id, M.matching_product_id De Cte ​​c Junte -se a Matches m Em c.product_id = m.product_id

 Finalmente, podemos recuperar os resultados em ordem hierárquica, classificando o CTE pela coluna "group_id". A relação hierárquica é capturada pela coluna "group_id", garantindo que cada linha reflita um grupo de produtos distintos.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3