需要ANSI 92递归SQL语句

我目前正在将SQL Server SQL语句转换为它们的ANSI通用等价物,并且使用WITH语句使用递归语句。 为了集中讨论这个问题,我将简化问题如下 如果我有两张桌子 ReportingUnit col1:钥匙 col2:ParentReportingUnitKey 设施 col1:钥匙 col2:ParentReportingUnitKey 该结构描述了直到设施的报告单元的层次结构,其中报告单元可以具有0..1直接父报告单元和0 ... n子报告单元。 设施是“叶子”记录,链接到报告单位。 我需要制作一个ANSI 92有效的SQL语句(或者最坏的一个可以在Oracle,DB2和SQL Server上运行),它将在层次结构的任何地方返回与给定报告单元相关的所有设施。 例如 ReportingUnit R1具有ReportingUnit子级R1.1和R1.2 ReportingUnit R1.1具有子R1.1.1,R1.1.2 ReportingUnit R1.2具有子级R1.2.1,R1.2.2 设施F1有一个父报告单位R1.1.1 设施F2具有父报告单元R1.1.2 设施F3具有父报告单元R1.2.1 设施F4有一个父报告单位R1.2.2 请记住,ReportingUnit表中可能有0 .. n级递归,如果给定参数ReportingUnit = R1,如何从SQL语句返回所有4个工具?     
已邀请:
我可以肯定在SQL-92中没有可用的递归语句;最支持的版本是SQL-99。 因此,您不会使用SQL-92。为什么你认为SQL-92是可取的?它是SQL功能的基础级别,还是有其他原因? 当前版本的DB2具有WITH子句,可以实现递归查询。我相信Oracle也有WITH子句;我不确定它是否可以使用它们实现递归查询。 Oracle还拥有完全非标准和非关系的CONNECT BY PRIOR。我不确定MS SQL Server支持什么。 您很可能无法找到所有三个指定DBMS支持的单一语法。     
递归查询没有SQL-92解决方案。 最好的选择是使用其中一种解决方案来编码层次关系,以便您可以使用标准SQL查询所有后代或祖先。 请在此处查看简要说明:“将平台解析为树的最有效/最优雅的方法是什么?”。 或者阅读Joe Celko撰写的“适用于Smarties的SQL中的树和层次结构”。     

要回复问题请先登录注册