我有一个类别表,其中包含我感兴趣的 3 个字段:
ID, Name, CategoryType
根节点通过 CategoryType 为 1 来标识,根节点的子节点为类型 2,子子节点为类型 3。
有第二个表 CategoryRelationship,其中重要的两列是:
CategoryID, ParentCategoryID
.
我想要的是记录列表,以便我们拥有每个类别/子类别的名称及其 ID,如下所示
ID RootName1 ID SubName1 ID Sub-SubName1
ID RootName1 ID SubName1 ID Sub-SubName2
ID RootName1 ID SubName2 ID Sub-SubName1
ID RootName1 ID SubName2 ID Sub-SubName2
ID RootName1 ID SubName2 ID Sub-SubName3
ID RootName2 ID SubName1 ID Sub-SubName1
ID RootName2 ID SubName2
ID RootName2 ID SubName3
ID 将是每个根和节点/子节点等
我想我已经完成了这项工作-我只是想知道这是否是“正确”的执行方式,或者这是否是更好的方式。这是针对 MS SQL 2012 express db 完成的。
select c.id,
c.name,
c1.Name,
cr1.CategoryID,
c2.Name,
cr2.CategoryID
from Category c
left outer join CategoryRelationship cr1 on cr1.CategoryParentID = c.id
left outer join CategoryRelationship cr2 on cr2.CategoryParentID = cr1.CategoryID
inner join Category c1 on c1.ID = cr1.CategoryID
inner join Category c2 on c2.id = cr2.CategoryID
where c.CategoryTypeID = 1
order by c.name, c1.name, c2.name
还有一点我需要一点帮助。第三张桌子里面有产品。每个产品都有一个与上面的 cr2.CategoryID 匹配的 SubCateoryID。我想在 Product 表中显示每个 cr2 类别的项目总数,并且我仍然想包括在 product 表中没有项目的任何类别。我不确定如何做最后一部分。