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 の記事には、他のデータベースでも使用できる厄介なハックがいくつかリストされています。しかし、同じコードが MySQL で実行されるようにするためだけに、Oracle のネストされたセット モデルのように洗練されていないものを使用することは、ひねくれているように思えます。

SQL-99 で指定されているように、一般的な方法は CTE であり、RDBMS のほとんどのフレーバーがそれをサポートしています (Oracle でさえ 11gR2 で CTE に再帰性を追加しました)。MySQL で CTE がサポートされていないことは、2006 年にバグとして報告されました。おそらく現在、Oracle は MySQL を所有しており、MySQL の実装に取り​​掛かるでしょう。

ただし、一般的なソリューションが必要なビジネス上の理由と、実際にカバーする必要があるデータベースのバージョンによって異なります。どの RDBMS でも実行できるデータベース アプリケーションを作成しても、どの RDBMS でもうまく実行できないというのは自明の理です。

于 2012-11-09T05:50:25.403 に答える