Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表示树结构的Oracle表中选择所有子代行_Sql_Oracle_Oracle10g_Hierarchical Data_Recursive Query - Fatal编程技术网

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

Sql 从表示树结构的Oracle表中选择所有子代行,sql,oracle,oracle10g,hierarchical-data,recursive-query,Sql,Oracle,Oracle10g,Hierarchical Data,Recursive Query,我在Oracle10g中有一个表MYTYPE,表示一个树结构,如下所示: ID | PARENTID | DETAIL Select * from MYDETAIL Starting with PARENTID= 1 --or whatever the root ID is connect by PARENTID = prior ID 我想选择MYTYPE中属于特定ID后代的所有行,以便我可以在其他地方创建查询,例如: SELECT * FROM MYDETAIL WHERE MY

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

ID | PARENTID | DETAIL
Select *
from MYDETAIL
Starting with PARENTID= 1 --or whatever the root ID is
connect by PARENTID = prior ID
我想选择MYTYPE中属于特定ID后代的所有行,以便我可以在其他地方创建查询,例如:

SELECT * 
  FROM MYDETAIL 
 WHERE MYTYPEID IN [all MYTYPE which are descendants of some ID];

构建子代集的一种经济高效的方法是什么,最好不使用PL/SQL?

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

将问号替换为要查找层次结构数据所基于的父级

参考:


Oracle可以执行递归查询。 尝试查看
从…开始。。。通过以下方式连接:

ID | PARENTID | DETAIL
Select *
from MYDETAIL
Starting with PARENTID= 1 --or whatever the root ID is
connect by PARENTID = prior ID

使用RDBMS中的
ID、ParentID
列管理分层数据称为模型。虽然很容易实现和维护(即插入、更新、删除),但确定血统(即祖先和后代)的成本很高。正如其他答案所写,Oracle的
connectby
将起作用,但这是一项昂贵的操作。您最好以不同的方式表示数据

对于您的情况,最简单的解决方案可能是向模式中添加一个所谓的表,并向原始表中添加一个
LEVEL
列。该表有列
ID,genderanti
,其中按ID选择将给出所有后代记录,按DescentantID选择将给出所有祖先记录<代码>级别
在基表上是订购记录所必需的。通过这种方式,您可以在昂贵的更新和便宜的阅读之间进行权衡,这正是您的问题所暗示的


涉及更改基础数据的其他可能性包括嵌套集和物化路径表示。这提供了类似的折衷方案,即用更昂贵的写入操作换取更便宜的读取操作。有关选项、优点和缺点的完整列表,以及一些实施说明

以下是oracle中“连接方式”功能的详细信息。

问问题、不选择正确答案或不提供您仍然需要的帮助的更多细节的糟糕形式。