我有一个分类表,其中有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
还有一点我需要一些帮助。有一个第三个表,里面有产品。每个产品都有一个SubCateoryID,它可以匹配上面的cr2.CategoryID。我想显示每个cr2类别的Product表中的项目总数,我仍然希望包含product表中没有项目的任何类别。我不知道怎么做最后一部分。
答案 0 :(得分:0)
我想我有这个:
select c.ID, c.Name, c1.Name, cr1.CategoryID, c2.Name, cr2.CategoryID,
(select count(*) from Product where product.SubcategoryID = cr2.CategoryID and Deleted = 0 and StatusID = 1)
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