如何从 sybase-ase 数据库创建递归路径?

发布于 2024-10-18 04:59:57 字数 270 浏览 6 评论 0原文

我之前曾使用其他 DBMS 解决过一个问题,但找不到与 Sybase-ASE 15.0 一起运行的解决方案。没有自定义存储过程的 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

I have a problem I've previously solved with other DBMS but can't find a solution to run with Sybase-ASE 15.0. Is this possible with SQL (or Views) without custom StoredProcedures?

Input:

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

Output:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

澉约 2024-10-25 04:59:57

编辑:仅 Sybase SQL Anywhere 支持此功能,“专业”Adaptive Server Enterprise 不支持此功能。

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

因此,以下内容应该有效:

WITH RECURSIVE hierarchy_path (id, node_path) AS 
(
  SELECT id, 
         name as node_path
  FROM the_unknown_table
  WHERE id = 1

  UNION ALL

  SELECT c.id, 
         p.node_path || ' / ' || c.name
  FROM the_unknown_table c
    JOIN hierarchy_path p ON p.id = c.parent_id 
)
SELECT *
FROM path
ORDER BY id

不确定 Sybase 是否使用标准 SQL 连接运算符 || 或不同的操作符。由于 Microsoft 忽略了那里的标准,我猜 Sybase 也使用了 +

Edit: this is only supported by Sybase SQL Anywhere, not by the "professional" Adaptive Server Enterprise.

According to the manual, Sybase supports recursive common table expressions.

So the following should work:

WITH RECURSIVE hierarchy_path (id, node_path) AS 
(
  SELECT id, 
         name as node_path
  FROM the_unknown_table
  WHERE id = 1

  UNION ALL

  SELECT c.id, 
         p.node_path || ' / ' || c.name
  FROM the_unknown_table c
    JOIN hierarchy_path p ON p.id = c.parent_id 
)
SELECT *
FROM path
ORDER BY id

Not sure if Sybase uses the standard SQL concatenation operator || or something different. As Microsoft is ignoring the standard there, I guess Sybase uses the + as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文