1

あるクエリの結果にエイリアスを設定し、そのエイリアスを別のクエリで使用したい。簡単な例として、次のようなものがあります。

(select a from foo) as fooResults;

select b from bar
  where b in fooResults;

この構文は明らかに機能しません。バニラのOracle SQLでこれを達成する方法はありますか? PL/SQL が必要な場合、構文は何ですか? 検索結果はすべて、列またはテーブルのエイリアスを指しているようです。

編集:可能であれば、後でいくつかのクエリで fooResults を使用できるようにしたいというのが、推進要因の 1 つです。

4

1 に答える 1

4

いくつかのオプションがあります。エイリアスを保持したい場合、最もクリーンなのはおそらくWITH句を使用することです

WITH fooResults
  AS( SELECT a
        FROM foo )
SELECT b
  FROM bar
 WHERE b IN (SELECT a
               FROM fooResults)

複数のクエリで式を使用する場合は、現実的にfooResultsはビューとして定義する必要があります。

ただし、句でfooResults定義されたビュー、インライン ビュー、またはサブクエリのいずれであっても、句でそれを使用する必要があります。どのように定義され ていても、できません。WITHSELECTINWHERE b IN fooResultsfooResults

于 2013-10-07T20:45:31.493 に答える