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