在Oracle中recursion

我在oracle中有下面的表格:

Parent(arg1, arg2) 

我想要关系父母的传递闭包。 那就是,我想要下面的表格

 Ancestor(arg1, arg2) 

在Oracle中这怎么可能?

我正在做以下事情:

 WITH Ancestor(arg1, arg2) AS ( SELECT p.arg1, p.arg2 from parent p UNION SELECT p.arg1 , a.arg2 from parent p, Ancestor a WHERE p.arg2 = a.arg1 ) SELECT DISTINCT * FROM Ancestor; 

我得到错误

 *Cause: column aliasing in WITH clause is not supported yet *Action: specify aliasing in defintion subquery and retry Error at Line: 1 Column: 20 

我怎样才能解决这个没有列别名?

2 Solutions collect form web for “在Oracle中recursion”

 WITH Ancestor(arg1, arg2) AS ( SELECT p.arg1, p.arg2 FROM parent p WHERE arg2 NOT IN ( SELECT arg1 FROM parent ) UNION ALL SELECT p.arg1, a.arg2 FROM Ancestor a JOIN parent p ON p.arg2 = a.arg1 ) SELECT * FROM Ancestor 

Oracle仅支持自11g第2版​​以来的recursionCTE

在早期版本中,使用CONNECT BY子句:

 SELECT arg1, CONNECT_BY_ROOT arg2 FROM parent START WITH arg2 NOT IN ( SELECT arg1 FROM parent ) CONNECT BY arg2 = PRIOR arg1 

Oracle允许recursion查询。 请参阅: http : //www.adp-gmbh.ch/ora/sql/connect_by.html

当然,这些通常都假设分层数据都在一张表中。 将其拆分成不同的表格会使事情变得复杂。

  • 有没有使用尾recursion不能写的问题?
  • 如何在多个文件中searchstring并返回Powershell中文件的名称?
  • recursion比循环更快吗?
  • 二进制算术程序中的“应用程序:不是程序”
  • recursion子文件夹search和返回列表python中的文件
  • recursion使用yield
  • 用Javarecursion列出文件
  • 使用Python的Pickle / cPickle打击最大recursion深度
  • 将recursionalgorithm转换为迭代algorithm的devise模式
  • 用PHPrecursion函数列出目录中的所有文件和文件夹
  • 自引用结构体定义?