表结构和表数据如下所示:
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

解决方案 »

  1.   

    if object_id('[tb]') is not null drop table [tb]
    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 行受影响)
    **/
      

  2.   


    能不能不要with这个大括号啊,就是把cte给去了,能不能写啊
      

  3.   

    因为在代码中要拼接sql语句,那个with没法拼接啊
      

  4.   

    您好,能不能只用tb这一张表,不使用with这个语法,因为要在代码中拼接sql语句,with这个语法没有办法拼接
      

  5.   

    其实可以使用 function 来实现你的要求不过,核心合适递归
      

  6.   

    with也可以拼接啊你可以发全部语句上来 看看。