2

我想知道是否有与 Oracle 的分层语法等效的通用 SQL start with...connect by。我需要可以在任何数据库上使用的东西。这是我的意思的那种查询(使用 Oracle 的示例 EMP 表):

SELECT empno , ename , job , mgr ,hiredate ,level 
FROM emp 
START WITH mgr IS NULL 
CONNECT BY PRIOR empno = mgr. 

递归公用表表达式适用于许多数据库实现,但不适用于 MySQL。

4

1 回答 1

6

在 MySQL 中没有办法做到这一点。Mike Hillyer 的一篇文章中列出了一些令人讨厌的 hack,它们也可以用于其他数据库。但是在 Oracle 中使用像嵌套集模型这​​样不优雅的东西只是为了在 MySQL 上运行相同的代码似乎是不恰当的。

通用方式是 CTE,因为它们在 SQL-99 中指定,并且大多数 RDBMS 风格都支持它(甚至 Oracle 在 11gR2 中为其 CTE 添加了递归)。MySQL 中缺乏对 CTE 的支持在 2006 年作为一个错误提出。也许现在甲骨文拥有 MySQL,他们将开始实施它。

但是,这实际上取决于您需要通用解决方案的业务原因以及您真正需要涵盖的数据库版本。编写可以在任何 RDBMS 上运行的数据库应用程序是不言而喻的,但它们都不能在任何一个 RDBMS 上运行良好。

于 2012-11-09T05:50:25.403 回答