假设我有以下示例数据:

| 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         |

我希望 Select 所有记录从account Id=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         |

我当前可以进行递归 Select ,但是之后我不能访问父引用中的数据,因此不能返回PARENT_NAME.我使用的代码是(适用于这个简单的示例):

SELECT id, parent_id, name
FROM tbl 
  START WITH id = 1 
  CONNECT BY PRIOR id = parent_id

我应该使用什么SQL来进行上述检索?

Additional key words for future seekers: SQL to select hierarchical data represented by parent keys in same table

推荐答案

使用:

    SELECT t1.id, 
           t1.parent_id, 
           t1.name,
           t2.name AS parent_name,
           t2.id AS parent_id
      FROM tbl t1
 LEFT JOIN tbl t2 ON t2.id = t1.parent_id
START WITH t1.id = 1 
CONNECT BY PRIOR t1.id = t1.parent_id

Database相关问答推荐

如果我想支持我的工作负载,我需要多少个 node ?

在多组MongoDB中查找最新文档的有效方法

Pocketbase 中的 SQLite 数据库可以根据自己的喜好进行修改吗?

即使将enable_seqscan设置为关闭,也未使用数组列上的 GIN 索引?

如何在 Angular 中使用 IndexedDB?

如何以编程方式将产品添加到 Opencart 数据库

当我们需要触发程序的返回值时?

在 bindParam 中使用 LIKE 进行 MySQL PDO 查询

使用python为组中的每个元素添加一个序列号

如何设计 SaaS 数据库?

SQL-Server:还原数据库时,SQL 命令行中的 NOUNLOAD 和 STATS 是什么意思?

行之间的 SQL 差异

JavaScript 布尔搜索查询生成器接口库?

单父实体的核心数据性能

MongooseJS - 如何找到具有最大值的元素?

如何在 Windows 中将用户添加到 PostgreSQL?

获取数据库路径

数据库与平面文本文件:当性能不是问题时, Select 一个而不是另一个的一些技术原因是什么?

我应该标准化我的数据库吗?

在 UI 中执行业务逻辑的单元测试数据库应用程序