Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 写完整的子项链_Sql_Sql Server_Join_Common Table Expression_Self Join - Fatal编程技术网

Sql 写完整的子项链

Sql 写完整的子项链,sql,sql-server,join,common-table-expression,self-join,Sql,Sql Server,Join,Common Table Expression,Self Join,我有下面的学生桌 id boss_id name age 1 NULL NEW_A 10 2 1 NEW_A 12 3 1 NEW_A 14 4 3 NEW_A 16 5 3 NEW_A 18 6 5 NEW_A 20 7 1 NEW_B 22 8 1 NEW_B 24 9 8 NEW_B 26 10 9

我有下面的学生桌

id  boss_id name    age
1   NULL    NEW_A   10
2   1       NEW_A   12
3   1       NEW_A   14
4   3       NEW_A   16
5   3       NEW_A   18
6   5       NEW_A   20
7   1       NEW_B   22
8   1       NEW_B   24
9   8       NEW_B   26
10  9       NEW_B   28
11  4       NEW_B   44
下面的查询

select s.id as student, boss.id as boss from Student s, Student boss
where s.boss_id = boss.id --and s.id = 11
order by s.id
检索

2   1
3   1
4   3
5   3
6   5
7   1
8   1
9   8
10  9
11  4
我想返回全链从属关系

例如,对于学生11,它应该是

student_id    boss_id
11              4
4               3
3               1

sql是否允许根据我的需要编写查询?

您可以使用递归CTE执行此操作:

;With Cte As
(
    Select  T.id, T.boss_id
    From    YourTable   T
    Where   T.Id = 11
Union All
    Select  T.id, T.boss_id
    From    YourTable   T
    Join    Cte         C   On  C.boss_id = T.id
                            And T.boss_id Is Not Null
)   
Select  id, boss_id
From    Cte


您可以使用递归CTE执行此操作:

;With Cte As
(
    Select  T.id, T.boss_id
    From    YourTable   T
    Where   T.Id = 11
Union All
    Select  T.id, T.boss_id
    From    YourTable   T
    Join    Cte         C   On  C.boss_id = T.id
                            And T.boss_id Is Not Null
)   
Select  id, boss_id
From    Cte


正在使用的dbms是什么?@vkp我使用ms sql,但我更喜欢universe sql。问题是universe太大了,没有每个人都使用相同的数据库tools@JuanCarlos Oropeza至少sql 99数据库管理系统在使用什么?@vkp我使用ms sql,但我更喜欢universe sql问题是universe太大了,并不是每个人都使用相同的tools@Juan卡洛斯·奥罗佩扎至少sql 99