加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 除Oracle之外的RDBMS中的CONNECT BY或分层查询

发布时间:2020-12-12 16:17:58 所属栏目:MsSql教程 来源:网络整理
导读:Oracle提供了非常方便的功能.您可以使用以下子句创建分层查询(递归行为): CONNECT BY [NOCYCLE] {condition [AND condition...]} [START WITH condition] 如下所述: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries003.htm 我想知
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网站 Port CONNECT BY to DB2上有一篇文章做了很好的转换.
另外一篇关于Explain Extended(Quassnoi的博客)的有趣文章显示了CONNECT BY和递归CTE之间的一些区别: Adjacency list vs. nested sets: Oracle,基于行和基于集合.他还有一篇很好的文章关于“SQL Server:递归CTE是否真的基于集合?”.似乎“Oracle中的递归CTE也没有基于设置”.我希望这有助于JOOQ中的转换,递归和理解SQL中递归的两种实现的差异.

问候,JJ.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读