首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >父子关系的SQL查询

父子关系的SQL查询
EN

Stack Overflow用户
提问于 2008-10-16 03:08:35
回答 4查看 31.9K关注 0票数 13

我有带有父子关系的数据库表,如下所示:

代码语言:javascript
复制
NodeId    NodeName    ParentId
------------------------------
1         Node1       0
2         Node2       0
3         Node3       1
4         Node4       1
5         Node5       3
6         Node6       5
7         Node7       2

这里,parentId =0表示它是根级别的节点。现在,我想编写一个SQL查询,它将返回父类别所有级别的子级。

例如,对于nodeId = 1,它应该返回3,4,5,6。

我使用的是MS SQL Server 2005

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-16 03:17:40

代码语言:javascript
复制
with [CTE] as (
    select * from [TheTable] c where c.[ParentId] = 1
    union all
    select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
)
select * from [CTE]
票数 10
EN

Stack Overflow用户

发布于 2008-11-17 13:56:33

您应该考虑在SQL数据库中为父子关系使用嵌套Set Model。这比尝试像这样将记录的parentID存储在表中要好得多,并且使这样的查询更加容易。

票数 6
EN

Stack Overflow用户

发布于 2009-05-06 06:45:19

为了确保它能正常工作,如果它是它自己的父类(否则它将递归,直到它崩溃):

代码语言:javascript
复制
   with [CTE] as (
        select * from [TheTable] c where c.[ParentId] = 1
        union all
        select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
        and c.[ParentId] <> c.[NodeId]
    )
    select * from [CTE]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/207309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档