Sql语句之递归查询
直接进入正题
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:
CREATE TABLE [aaa](
[id] [int] NULL,
[pid] [int] NULL,
[name] [nchar](10)
)
GO
INSERT INTO aaa VALUES(1,0,'a')
INSERT INTO aaa VALUES(2,0,'b')
INSERT INTO aaa VALUES(3,1,'c')
INSERT INTO aaa VALUES(4,1,'d')
INSERT INTO aaa VALUES(5,2,'e')
INSERT INTO aaa VALUES(6,3,'f')
INSERT INTO aaa VALUES(7,3,'g')
INSERT INTO aaa VALUES(8,4,'h')
GO
--下面的Sql是查询出1结点的所有子结点
with my1 as(select * from aaa where id = 1
union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
select * from my1 --结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1
--下面的Sql是查询出8结点的所有父结点
with my1 as(select * from aaa where id = 8
union all select aaa.* from my1, aaa where my1.pid = aaa.id
)
select * from my1;
--下面是递归删除1结点和所有子结点的语句:
with my1 as(select * from aaa where id = 1
union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
delete from aaa where exists (select id from my1 where my1.id = aaa.id)
二:
SQLserver2008使用表达式递归查询
--由父项递归下级
with cte(id,parentid,text)
as
(--父项
select id,parentid,text from treeview where parentid = 450
union all
--递归结果集中的下级
select t.id,t.parentid,t.text from treeview as t
inner join cte as c on t.parentid = c.id
)
select id,parentid,text from cte
--由子级递归父项
with cte(id,parentid,text)
as
(--下级父项
select id,parentid,text from treeview where id = 450
union all
--递归结果集中的父项
select t.id,t.parentid,t.text from treeview as t
inner join cte as c on t.id = c.parentid
)
select id,parentid,text from cte
转载于:https://www.cnblogs.com/ckblogs/p/3679787.html
- MSSQL中递归SQL查询语句实例说明-
- Oracle使用SQL语句进行递归查询
- 一条SQL语句查询无限递归树所有数据
- 一条SQL语句查询无限递归树所有数据
- SQL 语句技巧--递归查询机构和下属机构的用户数
- MSSQL中递归SQL查询语句实例说明-
- SQL 语句技巧--递归查询机构和下属机构的用户数
- SQL 语句技巧--递归查询机构和下属机构的用户数
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- [SQL] 查询表的主键sql语句
- sql语句查询Oracle|sql server|access 数据库里的所有表名,字段名
- Hibernate使用sql语句查询,返回实体类型的方法及注意事项
- MyBatis拦截器动态修改SQL语句及参数值(场景:查询中字段值中特殊字符自动转义)
- MySQL中优化sql语句查询常用的30种方法
- SQL查询语句的基本结构
- Excel 中使用SQL 语句查询数据(四)
- 用SQL语句查询累计值
- Oracle 查询并删除重复记录的SQL语句
- 页面Sql语句 查询根据判断值是否存在拼接查询条件
- java执行SQL语句实现查询的通用方法