Sql 如何获取ID';自参考表的定义?
我有一个表,其设置类似于:Sql 如何获取ID';自参考表的定义?,sql,tsql,Sql,Tsql,我有一个表,其设置类似于: MyTable Id INT Name VARCHAR ParentId INT 现在让我们假设此表中的数据如下所示: 1 AAA NULL 2 BBB 1 3 CCC 2 4 DDD 1 5 EEE 4 6 FFF NULL 我如何编写一个函数,它将接受一个id(int)并将所有可能的子项的id表返回给该父项 例如,我调用SomeFunction(1)并期望得到: 1 2 3 4 5 能够编写一个函数,但只有在
MyTable
Id INT
Name VARCHAR
ParentId INT
现在让我们假设此表中的数据如下所示:
1 AAA NULL
2 BBB 1
3 CCC 2
4 DDD 1
5 EEE 4
6 FFF NULL
我如何编写一个函数,它将接受一个id(int)并将所有可能的子项的id表返回给该父项
例如,我调用SomeFunction(1)并期望得到:
1
2
3
4
5
能够编写一个函数,但只有在子函数与父函数不同的情况下才能工作,但是我需要能够支持该场景。这可以通过递归cte来完成
with children as
(select id as child, parentid as parent
from mytable
where parentid is null
union all
select m.id, coalesce(c.parent,m.parentid)
from mytable m
join children c on m.parentid=c.child
)
select child
from children
where parent = 1
这可以通过递归cte来完成
with children as
(select id as child, parentid as parent
from mytable
where parentid is null
union all
select m.id, coalesce(c.parent,m.parentid)
from mytable m
join children c on m.parentid=c.child
)
select child
from children
where parent = 1
递归CTE是一种方法。对于特定id的所有子项,更简单的版本是:
with children as (
select id
from mytable
where id = 1
union all
select m.id
from mytable m join
children c
on m.parentid = c.id
)
select *
from children
递归CTE是一种可行的方法。对于特定id的所有子项,更简单的版本是:
with children as (
select id
from mytable
where id = 1
union all
select m.id
from mytable m join
children c
on m.parentid = c.id
)
select *
from children
提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,tsql
缩小了选择范围,但没有指定数据库。提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,tsql
缩小了选择范围,但没有指定数据库。