【发布时间】:2011-01-20 03:05:56
【问题描述】:
假设我有这个示例数据:
| Name | ID | PARENT_ID |
-----------------------------
| a1 | 1 | null |
| b2 | 2 | null |
| c3 | 3 | null |
| a1.d4 | 4 | 1 |
| a1.e5 | 5 | 1 |
| a1.d4.f6 | 6 | 4 |
| a1.d4.g7 | 7 | 4 |
| a1.e5.h8 | 8 | 5 |
| a2.i9 | 9 | 2 |
| a2.i9.j10| 10 | 9 |
我想选择所有从 accountId = 1 开始的记录,所以预期的结果是:
| Name | ID | PARENT_NAME | PARENT_ID |
-------------------------------------------
| a1 | 1 | null | null |
| a1.d4 | 4 | a1 | 1 |
| a1.e5 | 5 | a1 | 1 |
| a1.d4.f6 | 6 | a1.d4 | 4 |
| a1.d4.g7 | 7 | a1.d4 | 4 |
| a1.e5.h8 | 8 | a1.e5 | 5 |
我目前能够进行递归选择,但是我无法访问父引用中的数据,因此我无法返回 parent_name。我正在使用的代码是(适用于简单示例):
SELECT id, parent_id, name
FROM tbl
START WITH id = 1
CONNECT BY PRIOR id = parent_id
我应该使用什么 SQL 来进行上述检索?
未来搜索者的附加关键词:SQL 选择由同一张表中的父键表示的分层数据
【问题讨论】:
-
叫我固执,但我仍然不相信公认的答案是最好的。您能否发布建议的查询对您的数据的执行情况?
-
@Samuel 我接受了 OMG 的答案,因为它很简单并且适合这种场景要求。我仍然不相信子查询的性能比加入更好:基于@OMG 关于 tkprof 的评论(我 \\assume\\ 他确实运行了测试)我认为可以安全地估计建议的解决方案是正确的。我目前没有足够的测试数据来产生有意义的结果(
标签: sql database oracle plsql hierarchical-data