从表示树结构的Oracle表中选择所有后代行

ckp*_*ong 3 sql oracle recursive-query oracle10g hierarchical-data

我在Oracle 10g中有一个表MYTYPE表示树结构,如下所示:

ID | PARENTID | DETAIL
Run Code Online (Sandbox Code Playgroud)

我想选择MYTYPE中作为特定ID的后代的所有行,以便我可以在其他地方创建查询,例如:

SELECT * 
  FROM MYDETAIL 
 WHERE MYTYPEID IN [all MYTYPE which are descendants of some ID];
Run Code Online (Sandbox Code Playgroud)

构建后代集的成本效率最高的方法是什么,最好不使用PL/SQL?

OMG*_*ies 8

Oracle不支持在11g R2之前使用递归子查询因子(SQL Server语法中的CTE)的ANSI分层语法,因此您必须使用Oracle的本机CONNECT BY语法(从v2开始支持):

   SELECT t.*
      FROM MYTABLE t
START WITH t.parentid = ?
CONNECT BY PRIOR t.id = t.parentid
Run Code Online (Sandbox Code Playgroud)

将问号替换为您要查找基于的分层数据的父级.

参考: