小编典典

需要ANSI 92递归SQL语句

sql

我目前正在将SQL Server SQL语句转换为它们的ANSI泛型等效项,并且使用WITH语句来限制递归语句。

为了专注于此问题,我将简化如下的问题

如果我有两张桌子

  1. 报告单位

    • 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种功能?


阅读 236

收藏
2021-04-28

共1个答案

小编典典

我可以肯定地说,SQL-92中没有递归语句。支持该功能的最早版本是SQL-99。

因此,您会陷入不使用SQL-92的困境。为什么您认为SQL-92是可取的?是作为SQL功能的基本级别,还是有其他原因?

当前版本的DB2具有WITH子句,并且可以实现递归查询。我相信Oracle也有WITH子句。我不确定是否可以使用它们来实现递归查询。Oracle还具有完全非标准和非关系的CONNECT
BY PRIOR。我不确定MS SQL Server支持什么。

您很有可能无法找到所有三个指定DBMS支持的单一语法。

2021-04-28