什么是标准的SQL查询,相当于Oracle的'start with ... connect by',而不是DBMS特定的

时间:2012-11-09 03:36:30

标签: mysql sql oracle hierarchical-query

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

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

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

1 个答案:

答案 0 :(得分:6)

在MySQL中无法做到这一点。还有some nasty hacks listed in an article by Mike Hillyer也可以在其他数据库中使用。但是使用像Oracle中的嵌套集模型那样优雅的东西只是因为相同的代码将在MySQL上运行似乎有悖常理。

通用方法是CTE,因为它们在SQL-99中指定,并且大多数RDBMS支持它(甚至Oracle在11gR2中为其CTE添加了递归)。 MySQL was raised as a bug in 2006中缺乏对CTE的支持。也许现在Oracle拥有MySQL,他们将会实现它。

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