sql - 如何使用 SQL 进行递归连接以获取最低级别的数据

标签 sql sql-server tsql

我有以下一组数据:

ID          ParentID 
----------- ---------
8320        NULL     
8321        8320     
8322        8320     
8323        8322     
8325        NULL     
8328        8325     
8329        8328 

我想要实现的是选择属于特定 ID 的所有行。例如,如果我查询 ID = 8320,则必须返回以下数据:
ID          ParentID 
----------- ---------
8320        NULL     
8321        8320     
8322        8320     
8323        8322

到目前为止,这是我尝试过但没有真正成功的方法。
select *
from JobQueueLog JQL
    left join JobQueueLog JQLC on
        JQL.ID = JQLC.ParentID
    and JQLC.ParentID is not null
where JQL.ID = 8320

请问有什么帮助吗?

最佳答案

您需要使用 CTE 并进行递归查询

with tmp (id, parentid) as (
select id, parentid
from rec
where id = 8320
union all
select rec.id, rec.parentid
from tmp
inner join rec on tmp.id = rec.parentid
)
select id, parentid
from tmp

关于sql - 如何使用 SQL 进行递归连接以获取最低级别的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39974376/

相关文章:

mysql - 查询同一日期之间的数据

sql - 提高性能 : Very Slow Oracle SQL Join

c# - 针对 SQL Server 数据库的自定义身份验证

sql-server-2008 - SQL Server 顶部,顶部和底部都有关系

sql - 为什么即使不应该执行 T-SQL block 也会出错?

sql-server-2008 - 使用 t sql 创建一个具有传染性的时间线集

MySQL 转义问题

SQL 每个月的第一天

sql-server - DACPAC 和 SQL 序列

mysql - 如何使用 SQL 中上一行的值