1

MS SQL 2005 または T-SQL では、次のようなことができます。

SELECT T.NAME, T.DATE 
  FROM (SELECT * FROM MyTable WHERE ....) AS T

Oracle 9i DB で同様の SQL を試すことができませんでした。MS SQL では、ネストされた SQL は、その場で作成され、後で破棄される一時的/動的ビューとして扱われます。Oracleで同様のことを行うにはどうすればよいですか? それを行うためのビューを作成したくありません。

4

3 に答える 3

6

「as」で詰まると思います。

SELECT T.NAME, T.DATE 
  FROM (SELECT * FROM MyTable WHERE ....)  T

動作するはずです。

于 2008-10-30T19:26:47.393 に答える
3

変更する必要があるのは、キーワード「AS」を削除することだけです。Oracleはそれを列のエイリアスにのみ使用します(たとえば、SELECT dummy AS some_name FROM dual)が、それでも必要ありません。

于 2008-10-30T19:27:27.503 に答える
0

一時的な物理的な結果セットを本当に作成する必要がある場合は、サブクエリファクタリング句を使用して作成します。

with t as
(SELECT /*+ materliaze */ 
        *
 FROM   MyTable
 WHERE ....)
SELECT T.NAME, T.DATE 
FROM T
/

クエリ内の中間結果セットのオプティマイザによる正確な推定が効率的な実行プランにとって重要である特定の状況を除いて、一般的に価値はありません。この場合、動的サンプリングを使用して結果セットのサイズを確認できます。計算結果セットは、クエリの残りの部分で複数回使用されます。

ASをドロップするだけでよいはずです。安全であれば、Oracleはインラインビューをマスタークエリに論理的にマージします。

于 2008-10-30T21:27:21.737 に答える