我目前正在将SQL Server SQL语句转换为它们的ANSI泛型等效项,并且使用WITH语句来限制递归语句。
为了专注于此问题,我将简化如下的问题
如果我有两张桌子
报告单位
设施
col1:密钥
此结构描述了直至设施的报告单位的层次结构,其中报告单位可以具有0..1个直接父级报告单位和0..n个子级报告单位。
设施是“叶子”记录,链接到报告单位。
我需要设计一个ANSI 92有效的SQL语句(或者最糟糕的是,它可以在Oracle,DB2和SQL Server上使用),它将返回与给定报告单位有关的所有功能。
例如
ReportingUnit R1.2的子级为R1.2.1,R1.2.2
设施F1具有上级报告单位R1.1.1
设施F2具有上级报告单位R1.1.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支持的单一语法。