目前,我正在将SQL Server SQL语句转换为它们的ANSI泛型等价语句,并使用with语句执行递归语句。
为了集中精力讨论这个问题,我将把这个问题简化如下
如果我有两张桌子
- col1: Key
- col2: ParentReportingUnitKey
- col1: Key
- col2: ParentReportingUnitKey
这种结构描述的是报告单元的层次结构,在这种层次结构下,报告单元可能有0 .1个直接父母报告单位和0 .N儿童报告股。
设施是一个“叶”记录,链接到一个报告单位。
我需要创建一个ANSI 92有效的SQL语句(或者在最坏的情况下,它将工作在Oracle、DB2和Server上),该语句将返回与层次结构中任何地方的给定报告单元相关的所有工具。
(例如)
请记住,可能有0。在ReportingUnit表中的n级递归,如何在参数ReportingUnit=R1的情况下从SQL语句返回所有4个工具?
发布于 2008-11-24 04:15:35
我可以相当肯定的是,SQL92中没有递归语句;最早支持的版本是SQL99。
因此,您无法使用SQL92。为什么您认为SQL-92是可取的?它是SQL功能的一个基本级别,还是有其他原因?
当前版本的DB2具有WITH子句,可以实现递归查询。我相信Oracle也有WITH子句;我不确定它是否能够使用它们来实现递归查询。甲骨文也有完全非标准和非关系连接的优先.我不确定支持什么。
有相当大的可能性,您将无法找到所有三个指定DBMS都支持的单一语法。
发布于 2008-11-24 06:52:11
没有用于递归查询的SQL92解决方案。
最好的选择是使用一种编码层次关系的解决方案,以便您可以使用标准SQL查询所有后代或祖先。
请参阅这里的简短描述:"将平面表解析为树的最有效/最优雅的方法是什么?“。
或者读乔·塞尔科的"Smarties SQL中的树和层次结构“。
https://stackoverflow.com/questions/313383
复制相似问题