1

我的问题对于 sql 专家来说可能并不具有挑战性。我想将我的 sql 重写为 ansi-sql。如何在 Oracle 中将下面的 sql 更改为 ansi-sql?

select * 
from TEST r
start with r.childid=@CHILDID 
connect by prior r.PARENTID=r.childid and r.recordstatus=1
4

1 回答 1

1

ANSI SQL 等价物将是一个递归公用表表达式:

with recursive tree as (
   select * 
   from test
   where childid = .... --<< this is the START WITH part
   union all
   select child.* 
   from test child
     join tree parent ON child.parentid = parent.childid and child.recordstatus = 1  --<< this is the CONNECT BY part
) 
select *
from tree

如果您还想将recordstatus = 1条件应用于递归开始,我不是 100%。


Oracle 不符合这里的标准,你不能使用recursive关键字。

所以你需要从上面的查询中删除 recursive(SQL Server也是如此)

有关递归公用表表达式(在 Oracle 中称为“子查询分解”)的更多详细信息,请参见手册:

https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF55268

于 2015-11-09T08:08:19.020 回答