如何从 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 创建递归路径?的主要内容,如果未能解决你的问题,请参考以下文章