Фон: У меня есть 3 таблицы MSSQLServer: product, category, product_category_mapping. над продуктом находится до 5 уровней категорий, и эти данные хранятся в таблице сопоставлений. Что я хочу сделать, это перебирать продукты и для каждого уровня категории продукта, создать новое сопоставление для этого продукта против текущего уровня.Итерация SQL, хотя несколько уровней иерархии parent/child
Я начал с этого вопроса и думал, что смогу его развить, поставив курсоры на каждом этапе категории, где я буду выполнять вставку. Как только я начал с трудом размахивать головой, теперь мне интересно, может ли это даже самый лучший способ сделать это - может ли кто-нибудь показать мне лучший способ сделать это?
SELECT DISTINCT p.ProductId,p.name
FROM Nop_Product p
INNER JOIN Nop_Product_Category_Mapping cm ON p.ProductId = cm.ProductID
INNER JOIN Nop_Category c ON cm.CategoryID = c.CategoryID
WHERE c.CategoryID in (
--next level
SELECT DISTINCT Nop_Category.CategoryID
FROM Nop_Product_Category_Mapping
INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID
WHERE Nop_Category.ParentCategoryID in (
-- next level
SELECT DISTINCT Nop_Category.CategoryID
FROM Nop_Product_Category_Mapping
INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID
WHERE Nop_Category.ParentCategoryID in (
-- next level
SELECT DISTINCT Nop_Category.CategoryID
FROM Nop_Product_Category_Mapping
INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID
WHERE Nop_Category.ParentCategoryID in (
-- next level
SELECT DISTINCT Nop_Category.CategoryID
FROM Nop_Product_Category_Mapping
INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID
WHERE Nop_Category.ParentCategoryID in (
--top level categories
SELECT Nop_Category.CategoryID
FROM Nop_Product_Category_Mapping
INNER JOIN Nop_Category ON Nop_Product_Category_Mapping.CategoryID = Nop_Category.CategoryID
WHERE Nop_Category.ParentCategoryID = 0)))))
Какие РСУБД? MSSQLServer? –
Какую базу данных вы используете? –
В дополнение к комментарию от @Pablo - вы можете разместить некоторые образцы DDL и данных? – codingbadger