0

我使用的是 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 次查询才能获得上面的数据。有没有更好的办法?

4

2 回答 2

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
于 2013-08-25T05:23:41.517 回答
0

假设您的表的架构是这样的:

Id Name ParentId,对于 Grand 或 Top most set 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]
于 2013-08-25T03:31:19.230 回答