如何从 sybase-ase db 创建递归路径?

Posted

技术标签:

【中文标题】如何从 sybase-ase db 创建递归路径?【英文标题】:How to create a recursive path from sybase-ase db? 【发布时间】:2011-02-18 14:08:47 【问题描述】:

我以前使用其他 DBMS 解决了一个问题,但找不到使用 Sybase-ASE 15.0 运行的解决方案。对于没有自定义 StoredProcedures 的 SQL(或视图),这是否可行?

输入:

ID Name Parent
1  a
2  b    1
3  c    1
4  d    3

输出:

ID   PATH
1    a
2    a / b
3    a / c
4    a / c / d

【问题讨论】:

找到了一些关于主题 here 的附加信息(到目前为止对我没有多大帮助......) 【参考方案1】:

编辑:只有 Sybase SQL Anywhere 支持,“专业” Adaptive Server Enterprise 不支持。

根据手册,Sybase 支持递归公用表表达式。

所以以下应该可以工作:

WITH RECURSIVE hierarchy_path (id, node_path) AS ( 选择身份证, 名称为 node_path FROM the_unknown_table 哪里 id = 1 联合所有 选择 c.id, p.node_path || ' / ' || c.name FROM the_unknown_table c JOIN hierarchy_path p ON p.id = c.parent_id ) 选择 * 从路径 按编号订购

不确定 Sybase 是否使用标准 SQL 连接运算符 || 或其他方式。由于微软忽略了那里的标准,我猜 Sybase 也使用+

【讨论】:

我得到[Error Code: 156, SQL State: ZZZZZ] Incorrect syntax near the keyword 'WITH'. 经过研究,我发现这应该可以使用 Sybase Anywhere,但没有提示 Sybase ASE。 啊,对不起。我刚刚在 Sybase 在线手册中找到了这个。我没有意识到 ASA 和 ASE 之间有这么大的区别【参考方案2】:

简单的答案 - 不。

How to get list of values in GROUP_BY clause?

【讨论】:

如果递归只有一层,看起来没问题。但我看不出这如何与更深层次的递归一起工作。

以上是关于如何从 sybase-ase db 创建递归路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何从给定路径(包括子目录)递归加载所有符号文件?

创建递归路径Python的有效方法

如何在 Qt 中递归创建目录?

如何从 berkeley db 转储特定的颠覆路径?

DB2支持Oracle递归函数

DB2支持Oracle递归函数