表结构和表数据如下所示:
ID ParentID Name
1 -1 root1
2 1 第一级1
3 1 第一级2
4 -1 root2
5 4 第一级3
6 2 第一级1 第一级1
7 6 第一级1 第一级1 第一级1 能不能根据ID=2,通过一条sql语句得到如下结果:
ID
2
6
7逻辑上的意思是:根据ID,得到该ID下的所有子孙ID
ID ParentID Name
1 -1 root1
2 1 第一级1
3 1 第一级2
4 -1 root2
5 4 第一级3
6 2 第一级1 第一级1
7 6 第一级1 第一级1 第一级1 能不能根据ID=2,通过一条sql语句得到如下结果:
ID
2
6
7逻辑上的意思是:根据ID,得到该ID下的所有子孙ID
解决方案 »
- 请使用SQL SERVER2005的朋友帮下忙
- 如pubs样例数据库的结构说明和表字段含义在哪里找?
- 求教:订阅发布视图和存储过程,复制出错。报:订阅服务器上不存在对象
- 看看。。怎么结果等于2
- 我的win2003装不了sql2000
- 请教sql中的NULL值问题!
- 如何令事件探查器探查不到所执行的存储过程和代码
- 还想让大虾推荐几本学SQL SERVER存储过程开发方面的书,网上有下一更好了!
- 我要做一个可以分页的东东,请教如何从表中取出某一页的全部记录?
- sql中DATEPART和YEAR的区别
- gridview每插入一批数据, 数据库如何自动生成一批从1(或0)开始的序号??
- 关于俩表联合查询的问题
go
create table [tb]([ID] int,[ParentID] int,[Name] varchar(7),[C4] varchar(7),[C5] varchar(7))
insert [tb]
select 1,-1,'root1',null,null union all
select 2,1,'第一级1',null,null union all
select 3,1,'第一级2',null,null union all
select 4,-1,'root2',null,null union all
select 5,4,'第一级3',null,null union all
select 6,2,'第一级1','第一级1',null union all
select 7,6,'第一级1','第一级1','第一级1'
go;with cte as
(
select * from tb where id=2
union all
select a.* from tb a,cte b where a.parentid=b.id
)
select * from cte/**
ID ParentID Name C4 C5
----------- ----------- ------- ------- -------
2 1 第一级1 NULL NULL
6 2 第一级1 第一级1 NULL
7 6 第一级1 第一级1 第一级1(3 行受影响)
**/
能不能不要with这个大括号啊,就是把cte给去了,能不能写啊