`
ljl_xyf
  • 浏览: 633090 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

怎么实现获取指定ID下的所有子级(sql2005)

阅读更多
/*
标题:SQL SERVER 2005中查询指定节点及其所有子节点的方法(表格形式显示)
作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开) 
时间:2010-02-02
地点:新疆乌鲁木齐
*/

create table tb(id varchar(3) , pid varchar(3) , name nvarchar(10))
insert into tb values('001' , null , N'广东省')
insert into tb values('002' , '001' , N'广州市')
insert into tb values('003' , '001' , N'深圳市')
insert into tb values('004' , '002' , N'天河区')
insert into tb values('005' , '003' , N'罗湖区')
insert into tb values('006' , '003' , N'福田区')
insert into tb values('007' , '003' , N'宝安区')
insert into tb values('008' , '007' , N'西乡镇')
insert into tb values('009' , '007' , N'龙华镇')
insert into tb values('010' , '007' , N'松岗镇')
go

DECLARE @ID VARCHAR(3)

--查询ID = '001'的所有子节点
SET @ID = '001'
;WITH T AS
(
SELECT ID , PID , NAME 
FROM TB
WHERE ID = @ID
UNION ALL
SELECT A.ID , A.PID , A.NAME 
FROM TB AS A JOIN T AS B ON A.PID = B.ID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
002 001 广州市
003 001 深圳市
004 002 天河区
005 003 罗湖区
006 003 福田区
007 003 宝安区
008 007 西乡镇
009 007 龙华镇
010 007 松岗镇

(10 行受影响)
*/

--查询ID = '002'的所有子节点
SET @ID = '002'
;WITH T AS
(
SELECT ID , PID , NAME 
FROM TB
WHERE ID = @ID
UNION ALL
SELECT A.ID , A.PID , A.NAME 
FROM TB AS A JOIN T AS B ON A.PID = B.ID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
002 001 广州市
004 002 天河区

(2 行受影响)
*/

--查询ID = '003'的所有子节点
SET @ID = '003'
;WITH T AS
(
SELECT ID , PID , NAME 
FROM TB
WHERE ID = @ID
UNION ALL
SELECT A.ID , A.PID , A.NAME 
FROM TB AS A JOIN T AS B ON A.PID = B.ID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
003 001 深圳市
005 003 罗湖区
006 003 福田区
007 003 宝安区
008 007 西乡镇
009 007 龙华镇
010 007 松岗镇

(7 行受影响)
*/

drop table tb

--注:除ID值不一样外,三个SQL语句是一样的。

 

分享到:
评论

相关推荐

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    以上就是在MySQL中通过自定义函数实现递归查询父级ID和子级ID的方法。这种方法虽然效率可能不如其他数据库系统中的递归查询语法,但对于有限的层级深度和不支持递归查询的MySQL版本,这是一种有效的解决方案。需要...

    PHP获取栏目的所有子级和孙级栏目的ID号示例

    例如,如果你有一个文章分类表(`pcb_article_category`),并且每个分类都有一个父分类ID(`parentID`)字段,那么你可以通过递归或者循环的方式来获取指定分类的所有子级和孙级分类的ID。 在给定的代码示例中,`...

    sql server递归子节点、父节点sql查询表结构的实例

    以下是如何查询当前部门(由`@id`参数指定)的所有子部门: ```sql WITH dept AS ( SELECT * FROM dbo.deptTab WHERE pid = @id UNION ALL SELECT d.* FROM dbo.deptTab d INNER JOIN dept ON d.pid = dept.id )...

    中国省市县三级联动数据库SQLServer

    例如,根据父级ID获取子级区域。同时,利用JavaScript或者其他后端技术,可以实现下拉框的联动效果。 4. **性能优化**:由于三级联动涉及大量的关联查询,可能需要对`parent_id`字段创建索引以提高查询速度。此外,...

    省市区js级联控件,附带SQL语句

    parentId=123`,返回指定父级ID下的所有城市。这个接口的实现可能依赖于数据库查询,如: ```sql SELECT * FROM province_city_area WHERE parent_id = ?; ``` 4. **前端交互**:在前端页面上,使用JavaScript...

    基于mybatis的collection标签实现帖子评论多级回复以及关联用户信息查询

    在MyBatis中,`collection`标签用于处理一对多的关系映射,比如在查询帖子时获取其所有的一级评论,以及这些评论下的所有子评论。我们可以通过编写映射XML文件,定义一个嵌套的查询,其中`collection`标签内的内容...

    MySQL实现树状所有子节点查询的方法

    调用存储过程并传递根节点ID,将获取所有子节点的数据。 **方法三:自连接查询(适用于有限层次)** 如果树的层次深度是已知的且有限,可以使用多次`LEFT JOIN`来查询所有子节点。例如,对于深度为4的树,可以...

    递归查询菜单树,支持mysql,oracle

    通过递归查询,我们可以获取到所有级别的菜单项,包括它们的父级和子级。 在MySQL中,我们可以使用自连接来实现递归查询。假设我们有一个名为`menus`的表,包含`id`(主键)、`parent_id`(父菜单ID)和`name`...

    mysql 递归查找菜单节点的所有子节点的方法

    项目中遇到一个需求,要求查处菜单节点的所有节点,在网上查了一下,大多数的方法用到了存储过程,由于线上环境不能随便添加存储过程, 因此在这里采用类似递归的方法对菜单的所有子节点进行查询。 准备 创建menu表...

    Node.js-一二三四级联动ListView联动城市选择联动

    可以通过SQL查询来获取指定父级ID的所有子级城市。 3. ListView配置:为每一级城市创建一个ListView,设置适配器以显示城市列表。适配器通常继承自BaseAdapter,重写其中的方法如`getView()`来定制每个列表项的视图...

    Oracle树查询及相关函数

    3. **查找指定节点的所有直属及子级直属节点**:这时就需要使用`START WITH...CONNECT BY`语法,例如`START WITH ID = some_id CONNECT BY SJFLID = PRIOR ID`。这个查询会递归地找到指定节点及其所有子节点。 4. *...

    无限级下拉框级联Demo(含后台及数据库脚本)

    后台语言可以是Java、Python、PHP等,这里没有指定具体语言,但实现原理相似:接收请求,解析参数,执行SQL,然后将查询结果转换为JSON格式返回给前端。 前端实现是用户与无限级下拉框交互的界面。前端库如React、...

    任何用Ajax实现三级联动

    1. **Ajax通信**:通过Ajax技术实现实时通信,获取服务器端的数据。 2. **JavaScript处理**:利用JavaScript对页面元素进行控制,包括显示、隐藏、动态添加内容等。 3. **服务器端逻辑**:后端提供必要的接口服务,...

    ajaxpro三级联动

    在VS2005开发环境中,使用AjaxPro可以轻松实现这种功能,并且与Access数据库配合,可以方便地获取和处理数据。 AjaxPro是Microsoft ASP.NET AJAX的一种扩展,它提供了更强大的服务器端组件,支持异步调用和事件处理...

    Asp.net Ajax CascadingDropDown 控件省市县联动C#代码

    在C#代码中,你需要创建一个WebMethod或PageMethod,接收父级ID作为参数,然后查询数据库并返回子级的选项。 2. **ServicePath**:此属性用于指定AJAX服务的路径,通常是WebService或者PageMethod。 3. **...

    Oracle数据库语句大全.pdf

    - **查询表空间基本信息**:获取数据库中所有表空间的基本信息。 ```sql SELECT * FROM DBA_TABLESPACES; ``` #### 三、用户管理 - **创建用户**:创建新的数据库用户,并指定其默认表空间。 ```sql CREATE...

    layui实现下拉框三级联动

    接下来是MyBatis的XML配置,定义了一个名为`queryByParentId`的SQL查询,其作用是根据上级主键(`area_parent_id`)来获取子级区域的信息。这个查询将用于从服务器端获取需要展示在下拉框中的数据。 在HTML页面中,...

    jQuery+PHP+MySQL实现无限级联下拉框效果

    - 构建SQL查询语句,从数据库中查询所有`pid`等于父级ID的子级数据。 - 执行SQL查询,并通过`while`循环遍历结果集。 - 将查询结果的`id`和`text`字段组合成HTML的`option`元素,并拼接成完整的下拉菜单HTML代码。 ...

    GridView嵌套应用实例

    用户点击列头时,GridView会自动触发Sorting事件,我们可以在该事件中编写代码执行SQL查询,按照指定的字段重新排序数据。 在"EditNestedGridView"这个文件中,可能包含了实现上述功能的代码示例或教程。这个文件...

    70、修复父评论删除时子评论同时删除的问题1

    - 获取当前评论对象的所有“子评论”对象。 - 遍历这些“子评论”,根据条件调整它们的属性,如`post`、`level`、`parent`等。 - 实现递归处理,确保多级“子评论”也能得到正确的处理。 5. **事件触发** - 在...

Global site tag (gtag.js) - Google Analytics