从不同SQL表中选择分层数据的最佳方法

时间:2013-08-25 03:18:50

标签: sql sql-server

我正在使用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次查询才能获得上述数据。还有更好的方法吗?

2 个答案:

答案 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]