首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所需ANSI 92递归SQL语句

问所需ANSI 92递归SQL语句
EN

Stack Overflow用户
提问于 2008-11-24 04:03:51
回答 2查看 3.3K关注 0票数 2

目前,我正在将SQL Server SQL语句转换为它们的ANSI泛型等价语句,并使用with语句执行递归语句。

为了集中精力讨论这个问题,我将把这个问题简化如下

如果我有两张桌子

  1. ReportingUnit
代码语言:javascript
复制
- col1: Key
- col2: ParentReportingUnitKey

​

  1. 设施
代码语言:javascript
复制
- col1: Key
- col2: ParentReportingUnitKey

​

这种结构描述的是报告单元的层次结构,在这种层次结构下,报告单元可能有0 .1个直接父母报告单位和0 .N儿童报告股。

设施是一个“叶”记录,链接到一个报告单位。

我需要创建一个ANSI 92有效的SQL语句(或者在最坏的情况下,它将工作在Oracle、DB2和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

请记住,可能有0。在ReportingUnit表中的n级递归,如何在参数ReportingUnit=R1的情况下从SQL语句返回所有4个工具?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-24 04:15:35

我可以相当肯定的是,SQL92中没有递归语句;最早支持的版本是SQL99。

因此,您无法使用SQL92。为什么您认为SQL-92是可取的?它是SQL功能的一个基本级别,还是有其他原因?

当前版本的DB2具有WITH子句,可以实现递归查询。我相信Oracle也有WITH子句;我不确定它是否能够使用它们来实现递归查询。甲骨文也有完全非标准和非关系连接的优先.我不确定支持什么。

有相当大的可能性,您将无法找到所有三个指定DBMS都支持的单一语法。

票数 3
EN

Stack Overflow用户

发布于 2008-11-24 06:52:11

没有用于递归查询的SQL92解决方案。

最好的选择是使用一种编码层次关系的解决方案,以便您可以使用标准SQL查询所有后代或祖先。

请参阅这里的简短描述:"将平面表解析为树的最有效/最优雅的方法是什么?“。

或者读乔·塞尔科的"Smarties SQL中的树和层次结构“。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/313383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档