SQL SERVER 2005中查询指定节点及其所有父节点的方法
2010-10-14 17:03
411 查看
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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
(1 行受影响)
*/
--查询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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
002 001 广州市
(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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
003 001 深圳市
(2 行受影响)
*/
--查询ID = '009'的所有父节点
SET @ID = '009'
;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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
003 001 深圳市
007 003 宝安区
009 007 龙华镇
(4 行受影响)
*/
drop table tb
--注:除ID值不一样外,四个SQL语句是一样的。
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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
(1 行受影响)
*/
--查询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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
002 001 广州市
(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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
003 001 深圳市
(2 行受影响)
*/
--查询ID = '009'的所有父节点
SET @ID = '009'
;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.ID = B.PID
)
SELECT * FROM T ORDER BY ID
/*
ID PID NAME
---- ---- ----------
001 NULL 广东省
003 001 深圳市
007 003 宝安区
009 007 龙华镇
(4 行受影响)
*/
drop table tb
--注:除ID值不一样外,四个SQL语句是一样的。
相关文章推荐
- SQL SERVER 2005中查询指定节点及其所有子节点的方法
- 【SQL精彩语句】SQL SERVER 2005中查询指定节点及其所有子节点的方法(表格形式显示)
- 你真的会玩SQL吗?查询指定节点及其所有父节点的方法
- 查询指定节点及其所有父节点的方法
- 【SQL精彩语句】SQL SERVER 2000中查询指定节点及其所有子节点的函数(表格形式显示)
- 查询指定节点及其所有子节点的方法
- SQL SERVER 2000中查询指定节点及其所有子节点的函数
- MyBatis--关联关系查询--自关联--多对一--查询指定节点及其所有父节点
- 查询指定节点及其所有子节点的函数
- sql工具:一条sql语句,查询sql server某个指定表的所有列及其属性 .
- BOM之一------------查询指定节点及其所有子节点-------------------
- 在SQL Server 2005所有表中搜索某个指定列的方法
- MyBatis--关联关系查询--自关联--一对多--查询指定父节点及其所有子
- 在SQL Server 2005所有表中搜索某个指定列的方法
- sql工具:一条sql语句,查询sql server某个指定表的所有列及其属性
- sql工具:一条sql语句,查询sql server某个指定表的所有列及其属性
- 查询指定节点及其所有子节点的函数
- MSSQL 查询所有节点及其所有子节点的函数
- SQL Server 树型结构查询指定节点 SQL Server 树型结构查询的排序
- Sql server 2005 查询某个数据库下的所有表的记录行数