«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как использовать рекурсивную группировку запросов, чтобы соответствовать продуктам в SQL Server?

Как использовать рекурсивную группировку запросов, чтобы соответствовать продуктам в SQL Server?

Опубликовано в 2025-04-19
Просматривать:760

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

SQL Server: рекурсивный запрос для группировки соответствующих продуктов

в таблице реляционных баз данных с именем «Соотношения», каждая запись представляет собой совпадение между двумя продуктами. Цель состоит в том, чтобы создать таблицу «групп», которая фиксирует эти матчи в иерархической структуре. В частности, столбец "Group_ID" должен сохранить минимальный идентификатор продукта среди тех, кто принадлежит к одной и той же группе.

для достижения этого, мы можем использовать силу рекурсивных запросов в SQL. Рекурсивный запрос выполняет несколько раундов операций на одних и тех же данных. Вот решение, которое использует общее выражение таблицы (CTE) для отслеживания рекурсивных операций:

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

Базовый случай рекурсии - это когда продукт не соответствует совпадениям, и в этом случае он формирует свою собственную группу. Это захвачено в первой части 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

] рекурсивная часть CTE находит все соответствующие продукты для каждой группы. Он итеративно добавляет эти соответствующие продукты в группу.

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

Наконец, мы можем получить результаты в иерархическом порядке, сортируя CTE с помощью «Group_ID». Иерархические отношения захватываются столбцом «group_id», гарантируя, что каждая строка отражает отдельную группу продуктов.

, используя рекурсивные возможности SQL Server, мы можем эффективно извлечь сложные иерархические паттерны и группы, связанные с группой в сложных структурах баз данных. &&]]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3