SQL查询子节点或父节点
来源:互联网 发布:杭州淘宝运营 编辑:程序博客网 时间:2024/06/12 05:16
查询指定节点及其所有子节点或父节点
****************************查询开始******************************
--SQL2005 使用CTE
DECLARE @ VARCHAR(10)
SET @='栾川县'
;WITH XiaoAi AS
(
SELECT id FROM tb WHERE [name]=@
UNION ALL
SELECT t.id FROM XiaoAi AS a INNER JOIN tb AS t ON a.id=t.pid
)
SELECT t.* FROM XiaoAi AS a LEFT JOIN tb AS t ON t.id=a.id
--SQL 2000 使用函数
IF OBJECT_ID('dbo.XiaoAi') IS NOT NULL DROP FUNCTION dbo.XiaoAi
GO
CREATE FUNCTION dbo.XiaoAi(@ VARCHAR(20))
RETURNS @t TABLE(id VARCHAR(3), pid VARCHAR(3), [name] VARCHAR(20),Level INT)
AS
BEGIN
DECLARE @level INT
SET @level=1
INSERT INTO @t SELECT *,@level FROM tb WHERE [name]=@
WHILE(@@ROWCOUNT>0)
BEGIN
SET @level=@level+1
INSERT INTO @t SELECT t.*,@level FROM tb AS t,@t AS a WHERE a.id=t.pid AND a.level=@level-1
END
RETURN
END
GO
--调用函数
SELECT id, pid,[name] from dbo.XiaoAi('栾川县')
--****************************查询结束*************************************
/*
2、查询指定节点及其所有父节点
如:已知 栾川县
得到以下结果
id pid name
---- ---- ----------
001 NULL 河南省
002 001 洛阳市
004 002 栾川县
*/
----------------------测试开始-------------------------------------------------
DECLARE @s VARCHAR(10)
SET @s='栾川县'
SELECT id, pid,[name] INTO # FROM tb WHERE [name]=@s
WHILE @@ROWCOUNT>0
BEGIN
INSERT INTO # SELECT t.id, t.pid,t.[name] FROM tb AS t
INNER JOIN # AS a ON t.id=a.pid AND t.id NOT IN(SELECT ID FROM #)
END
SELECT * FROM # ORDER BY ID
-----------------------测试结束-------------------------------------------------
GO
CREATE TABLE tb(id VARCHAR(3),pid VARCHAR(3),[name] VARCHAR(10))
GO
INSERT INTO tb SELECT '001',NULL,'河南省'
UNION ALL SELECT '002','001','洛阳市'
UNION ALL SELECT '003','001','新乡市'
UNION ALL SELECT '004','002','栾川县'
UNION ALL SELECT '005','003','长垣县'
UNION ALL SELECT '006','002','孟津县'
UNION ALL SELECT '007','004','冷水乡'
UNION ALL SELECT '008','004','叫河乡'
UNION ALL SELECT '009','008','A村'
UNION ALL SELECT '010','008','B村'
GO
/*
1、查询指定节点及其所有子节点
--如:已知 栾川县
--得到结果
id pid name
---- ---- ----------
004 002 栾川县
007 004 冷水乡
008 004 叫河乡
009 008 A村
010 008 B村
*/
- SQL查询子节点或父节点
- SQL中获取子节点或父节点
- SQL - 根据父节点查询所有子节点
- sql递归查询子节点
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
- 如何查询子节点和父节点
- JQuery查询父节点或者子节点
- ORACLE 树形遍历查询根节点、父节点、子节点
- ORACLE 树形遍历查询根节点、父节点、子节点
- SQL 递归树 子父节点相互查询
- Oracle树查询(查询所有子节点,父节点等等)
- Oracle树查询(查询所有子节点,父节点等等)
- Oracle树查询(查询所有子节点,父节点等等)
- Oracle树查询(查询所有子节点,父节点等等)
- linux 64bit _ php 添加 tidy 支持 _ 笔记
- javaWeb定时器
- 反射 Inside Dynamics AX 4.0 14章 读书笔记
- Android开发如何利用Google map
- SQL 将行写进一列
- SQL查询子节点或父节点
- 测试报告编写指南
- 灰色的2009年年底
- AX中的收藏夹备份
- nagios监控mysql主从复制
- 使用ADF文本编辑器(RichTextEditor)组件
- 自动提取C#类文件中的代码注释文字
- VOA背景音乐
- some note about js