假设我有下表:

CustomerID ParentID Name
========== ======== ====
1          null     John
2          1        James
3          2        Jenna
4          3        Jennifer
5          3        Peter
6          5        Alice
7          5        Steve
8          1        Larry 

我想在一个查询中检索James的所有后代(Jenna、Jennifer、Peter、Alice、Steve). 谢谢, 巴勃罗.

推荐答案

在SQL Server 2005上,您可以使用CTEs (Common Table Expressions):

with Hierachy(CustomerID, ParentID, Name, Level)
as
(
select CustomerID, ParentID, Name, 0 as Level
    from Customers c
    where c.CustomerID = 2 -- insert parameter here
    union all
    select c.CustomerID, c.ParentID, c.Name, ch.Level + 1
    from Customers c
    inner join Hierachy ch
    on c.ParentId = ch.CustomerID
)
select CustomerID, ParentID, Name
from Hierachy
where Level > 0

Database相关问答推荐

如何使用PostgreSQL列出特定数据库的表并按大小排序?

Prisma - 将属性的类型设置为枚举数组

是否可以同时从 RocksDB 读取?

将一个表中的多个列连接到另一个表中的单个列

repeating groups是什么意思?

授予对具有特定前缀的多个表的权限

如何识别 DB2 端口号

免费的 SQL 比较工具

用于存储年份的 MySQL 类型:Smallint 或 Varchar 或 Date?

设计数据库时最重要的考虑因素是什么?

Neo4j:逐步创建自动索引

表别名如何影响性能?

如何在磁盘上布局 B-Tree 数据?

JPA:处理 OptimisticLockException 的模式

在数据库中存储年份

一个表可以有两个外键吗?

使用批处理文件执行一组 SQL 查询?

字符串列上的postgresql索引

查询 oracle clob 列

不同类型的SQL之间的区别?