我有两张桌子
Categories
--Id
--Name
--ParentCategoryId (reference to Categories table column Id)
Materials
--Id
--Name
--CategoryId (reference to Categories table column Id)
我想选择指定的材料及其所有父类别
Categories table data
--Id Name ParentCategoryId
1 food null
2 fruits 1
3 exotic fruits 2
4 IT equipment null
Materials table data
--Id Name CategoryId
1 mango 3
所以当我选择 Id=1 的芒果时,我想在我的结果集中获取该材料的所有相关类别(食物、水果、异国水果)
我通过使用递归子句写了这样的东西
WITH RECURSIVE RecursiveCTE AS(
SELECT m."Id", m."Name", c."Id" as "CategoryId", c."Name" "CategoryName"
FROM "Materials" m
INNER JOIN "Categories" c on c."Id" = m."CategoryId"
where m."Id" = 1
union all
SELECT rt."Id", rt."Name", c."Id" as "CategoryId", c."Name" "CategoryName"
FROM RecursiveCTE rt
INNER JOIN "Categories" c on c."ParentCategoryId" = rt."Id"
)
SELECT * FROM RecursiveCTE
已解决)))
WITH RECURSIVE RecursiveCTE AS(
SELECT m."Id", m."Name", c."Id" as "CategoryId", c."Name" as "CategoryName", c."ParentCategoryId"
FROM "Materials" m
INNER JOIN "Categories" c on c."Id" = m."CategoryId"
where m."Id" = 1
union all
SELECT rt."Id", rt."Name", c."Id" as "CategoryId", c."Name" as "CategoryName", c."ParentCategoryId"
FROM RecursiveCTE rt
INNER JOIN "Categories" c on c."Id" = rt."ParentCategoryId"
WHERE rt."ParentCategoryId" is not null
)
SELECT * FROM RecursiveCTE