Sql 类别的递归选择

Sql 类别的递归选择,sql,postgresql,recursion,Sql,Postgresql,Recursion,在我的数据库中,我有下表: Category: {[Name: VarChar, TopCategory: VarChar]} 该表包含以下内容: 现在我需要使用递归语句中的with子句从类别计算机科学的所有子类别中获取所有名称。 这必须使用SQL,而不是PHP或其他编程语言来完成 所有子类别不仅意味着直接代理,在本例中还意味着C++和Java 我该怎么做 到目前为止,我所拥有的: SELECT name FROM category WHERE (topcategory = 'Compute

在我的数据库中,我有下表:

Category: {[Name: VarChar, TopCategory: VarChar]}
该表包含以下内容:

现在我需要使用递归语句中的
with子句
从类别
计算机科学
的所有子类别中获取所有名称。 这必须使用SQL,而不是PHP或其他编程语言来完成

所有子类别不仅意味着直接代理,在本例中还意味着
C++
Java
我该怎么做

到目前为止,我所拥有的:

SELECT name FROM category WHERE (topcategory = 'Computer Science')
我们开始:

WITH RECURSIVE cte_t1 (name, topcategory, Level)
AS
(
SELECT name, topcategory, 0 AS Level
FROM Category
WHERE topcategory = N'ComputerScience'
UNION ALL
SELECT t1.name, t1.topcategory, Level + 1
FROM Category t1, cte_t1 ctet1
WHERE ctet1.name= t1.topcategory
)
SELECT Level, topcategory, name
FROM cte_t1

如果您的数据库是oracle,您可以尝试它():


您想用逗号分隔这些值吗?为什么它没有用?你将得到递归结果,而不是从John Woo那里得到的答案,现在是了。当它是某个示例中的复制粘贴时,我投了反对票,您甚至不需要修改、修复或测试。请注意,物化路径(扩展ltree)可以用于这种目的,并且可以轻松快速地进行嵌套类别。谢谢您,Michael。除了我自己的SQL Server编辑器,我没有从任何地方复制和粘贴。我创建了一个名为@table1的表变量,其中包含字段category和parent。我注意到我在发布答案时没有正确地翻译姓名,后来又对其进行了编辑。但是我设计了表,编写了查询并测试了结果。只是用我自己的假名字。
select * from category 
  start with name = 'Computer Science'
connect by prior name = top_category