我正在使用SQL Server 2012.我有类别,页面和部分的表的层次结构。
每个类别都有零个或多个页面,每个页面都有零个或多个部分。我想显示符合特定查询的所有类别以及所有相应页面,与它们一致,然后显示所有这些页面的相应部分。
例如:
Category 1:
Page A
Page B
Category 2
Page C (section 1, section 2, section 3)
据我所知,这需要对类别进行一次查询,然后在迭代类别时,我需要进行2页查询(例如,SELECT * FROM pages P WHERE P.category = 1)。最后,对于每个页面,我需要进行一个节查询(总共3个)。这意味着我必须进行6次查询才能获得上述数据。还有更好的方法吗?
答案 0 :(得分:1)
由于缺乏架构信息......
我假设您有三个表,其架构如下:
Categories
CategoryID (int)
CategoryName (varchar)
CategoryDisplayOrder (int)
Pages
PageID (int)
PageCode (varchar)
PageDisplayOrder (int)
Sections
SectionID (int)
SectionNumber (varchar)
SectionDisplayOrder (int)
您的查询将如下所示:
SELECT CategoryName, PageCode, SectionNumber
FROM Categories
INNER JOIN Pages ON Categories.CategoryID = Pages.CategoryID
INNER JOIN Sections ON Pages.PageID = Sections.PageID
ORDER BY CategoryDisplayOrder, PageDisplayOrder, SectionDisplayOrder
答案 1 :(得分:0)
假设您的表格架构如下:
Id名称ParentId,对于Grand或最高集合parent = 0或-1
查询将如下所示:
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[Id]
)
select * from [CTE]