Oracle附带了一个非常方便的功能。您可以使用以下子句创建分层查询(递归行为):
CONNECT BY [NOCYCLE] {condition [AND condition...]} [START WITH condition]
如此处记录:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries003.htm
我想知道,是否还存在其他支持等效或相似语法的RDBMS?还是可以使用常规SQL对这种递归行为进行一般性的模拟?
我想能够模拟的一个很好的例子是(摘自Oracle文档):
SELECT LPAD(' ', 2 * (LEVEL-1)) || last_name org_chart,
employee_id, manager_id, job_id
FROM employees
START WITH job_id = 'AD_VP'
CONNECT BY PRIOR employee_id = manager_id;
导致:
ORG_CHART EMPLOYEE_ID MANAGER_ID JOB_ID
------------------ ----------- ---------- ----------
Kochhar 101 100 AD_VP
Greenberg 108 101 FI_MGR
Faviet 109 108 FI_ACCOUNT
Chen 110 108 FI_ACCOUNT
Sciarra 111 108 FI_ACCOUNT
Urman 112 108 FI_ACCOUNT
Popp 113 108 FI_ACCOUNT
Whalen 200 101 AD_ASST
Mavris 203 101 HR_REP
Baer 204 101 PR_REP
Higgins 205 101 AC_MGR
Gietz 206 205 AC_ACCOUNT
De Haan 102 100 AD_VP
Hunold 103 102 IT_PROG
Ernst 104 103 IT_PROG
Austin 105 103 IT_PROG
Pataballa 106 103 IT_PROG
Lorentz 107 103 IT_PROG
该LEVEL
用它来实现伪列和压痕对我来说并不那么重要
developerWorks网站上有一篇文章将端口CONNECT
BY
转换为DB2,该文章进行了很好的转换。在Explain
Extended(Quassnoi的博客)上也有一篇有趣的文章,显示了CONNECT
BY和递归CTE之间的一些区别:邻接表与嵌套集:Oracle,基于行和基于集。他还有一篇不错的文章,内容涉及“ SQL
Server:递归CTE是否真的基于集?”。似乎“
Oracle中的递归CTE也未设置”。我希望这有助于进行JOOQ的转换,递归,并了解SQL递归的两种实现的区别。
问候,JJ。
问题内容: 我在Oracle11g中有一个具有(id,parent_id)结构的表。 我想对其进行查询,以获取与这些ID各自分层链接的所有行,因此结果应为: 我一直在和上苦苦挣扎,现在,我所能得到的只是查询所需结果的一小部分: 我不想使用任何循环来获取完整的结果。 任何的想法 ? 最好的问候,J茅r么我Lefr猫re PS:在第一个答案之后编辑,注意到我忘记了一些我想要的结果… 问题答案: 您发布
问题内容: 我试图找到一个特定领域的所有深度的父母,祖父母等。例如,给定以下结构,如果我提供5,则返回的值应为1、2、3和4。 我该怎么做? 问题答案:
问题内容: 对我来说,这是一个永无止境的话题,我想知道我是否会忽略某些事情。本质上,我在应用程序中使用两种类型的SQL语句: 具有“后备”限制的常规查询 排序查询和分页查询 现在,我们讨论的是针对具有几百万条记录的表的一些查询,再加上另外五个具有几百万条记录的表的查询。显然,我们几乎不希望全部获取它们,这就是为什么我们有上述两种方法来限制用户查询的原因。 情况1 确实很简单。我们只是添加了一个额外
我有Oracle表: 数据 Oracle是否支持产生以下输出的查询?--删除重复并将其分组到单个JSON数组中 版本: Oracle数据库12c企业版发布12.2.0.1.0-64位生产
问题内容: 我希望我能够解释困扰我的问题。我有以下分层数据集(这只是34K记录的子集) 这是树的代表 我需要的是清单的所有记录,带有exam = N和潜在的extest =’J’记录,可以嵌套。 给我 但是我需要的是 当我遇到EXAM =’N’记录时,需要停止运行。 我需要类似“停止于”子句的内容。 如何才能做到这一点? 问题答案: 罗伯特 您可以通过在connect by子句中添加“ exam