0

SQL ステートメントを解析して再構築することなく、Oracle でクエリをネストする信頼できるアルゴリズムの方法を探しています。DB2、MYSQL、および SQLITE では、次のように、内側のサブクエリに設定された最大の列から、非常に外側のクエリに設定された最小の列に簡単にネストできます。

  SELECT A, B FROM (
       SELECT A, B, C FROM (
            SELECT A, B, C, D FROM (
                 SELECT * FROM myTable
                 )
            )
      )
 )

これは Oracle では機能しません。WITH 句を使用する必要がありましたが、これにより次のような 1 レベルのネストが可能になります。

 WITH Q1 as (
      SELECT * FROM myTable 
            ) 
            SELECT A, B FROM Q1

上記のDB2やMySQLのようなOracleでselectステートメントをネストするアルゴリズム的な方法はありますか

常に単一のテーブルであると想定できます。クエリは自動的に生成されます

根本的な原因を見つけました:

私のコードは、「AS エイリアス」が必要であると想定し、「Select A, B from (select A, B, C from myTable) AS Q1」のようにサブクエリに追加します --- Oracle はそれを好まず、エラーを出します」右括弧がありません」

4

1 に答える 1

1

「うまくいかない」とはどういう意味ですか? あなたが望むと思われる構造は、Oracleで完全にうまく機能します

SQL> select ename from (
  2    select ename, empno from (
  3      select ename, empno, job from (
  4        select ename, empno, job, mgr from (
  5          select * from emp
  6        )
  7      )
  8    )
  9  );

ENAME
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

14 rows selected.
于 2013-07-14T22:18:43.810 に答える