父子链的SQL查询

标签 sql sql-server sql-server-2005 tsql hierarchical-data

我有一个表,可以将表中的另一个成员引用为父级。该父级还可以将另一行引用为其父级......依此类推。

id     col1     col2    parentID
1      foo      bar       NULL
2      blah     boo       1
3      fob      far       2
4      wob      lob       NULL

我想返回给定 id 的链。因此,如果 id 为 3,我将返回第 3 行、第 2 行和第 1 行。如果 id 为 2,我将返回第 2 行和第 1 行。如果 id 为 1 或 4,我将仅返回该行。

谢谢

最佳答案

使用 recursive CTE :

DECLARE @id INT
    SET @id = 3

;WITH hierarchy AS (
  SELECT t.id, t.parentid
    FROM YOUR_TABLE t
   WHERE t.id = @id
 UNION ALL
 SELECT x.id, x.parentid
   FROM YOUR_TABLE x
   JOIN hierarchy h ON h.parentid = x.id)
SELECT h.id
  FROM hierarchy h

结果:

id
---
3
2
1

关于父子链的SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4188427/

相关文章:

sql - 如何从数据库中获取上个月的数据

c# - 执行阅读器 : Connection property has not been initialized

sql - 无法启动本地数据库

sql-server - 将记录从 CTE 插入到表中

c# - 使用 Microsoft.SqlServer.SMO 创建一个 Alter Stored Procedure sql 脚本?

sql - 从路径中删除文件名

sql - 为什么我们需要带有聚合函数的 GROUP BY?

sql - 从 Sql 服务器中的 where 子句中排除函数

sql - 加入两个sql结果

sql - 对于返回多于 1 个值的 SQL 选择,当 Id 为 GUID 时,它们如何排序?