"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo usar la agrupación de consultas recursivas para que coincidan con los productos en SQL Server?

¿Cómo usar la agrupación de consultas recursivas para que coincidan con los productos en SQL Server?

Publicado el 2025-04-19
Navegar:372

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

SQL servidor: consulta recursiva para agrupar los productos coincidentes

en una tabla de base de datos relacional llamada "coincidencias", cada registro representa una coincidencia entre dos productos. El objetivo es crear una tabla de "grupos" que capture estos partidos en una estructura jerárquica. Específicamente, la columna "Group_id" debe almacenar la identificación mínima del producto entre las que pertenecen al mismo grupo.

para lograr esto, podemos aprovechar el poder de las consultas recursivas en SQL. Una consulta recursiva realiza múltiples rondas de operaciones en los mismos datos. Aquí hay una solución que emplea una expresión de tabla común (CTE) para rastrear las operaciones recursivas:

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

El caso base de la recursión es cuando un producto no tiene coincidencias, en cuyo caso forma su propio grupo. Esto se captura en la primera parte del 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 parte recursiva del CTE encuentra todos los productos coincidentes para cada grupo. Agrega iterativamente estos productos coincidentes al grupo.

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

Finalmente, podemos recuperar los resultados en orden jerárquico clasificando el CTE por la columna "Group_id".

SELECT * FROM CTE ORDER BY Group_ID
Esta consulta recursiva produce de manera efectiva la agrupación deseada de productos en la Tabla "Grupos". La relación jerárquica es capturada por la columna "Group_id", asegurando que cada fila refleje un grupo de productos distinto.

aprovechando las capacidades recursivas del servidor SQL, podemos extraer eficientemente patrones jerárquicos complejos y datos relacionados con los datos relacionados con las estructuras de dato complejas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3