大規模なクエリを繰り返さずに再利用するにはどうすればよいでしょうか? 質問する

大規模なクエリを繰り返さずに再利用するにはどうすればよいでしょうか? 質問する

horrible_query_1とという 2 つのクエリがありugly_query_2、それらに対して次の 2 つのマイナス演算を実行するとします。

(horrible_query_1) minus (ugly_query_2)
(ugly_query_2) minus (horrible_query_1)

あるいは、 がありterribly_large_and_useful_query、それが生成した結果セットを将来のいくつかのクエリの一部として使用したい場合もあります。

同じクエリを複数の場所にコピーして貼り付けるのを避けるにはどうすればよいですか? 「同じことを繰り返さず」、DRY 原則に従うにはどうすればよいですか。これは SQL で可能ですか?

私は Oracle SQL を使用しています。ポータブル SQL ソリューションが望ましいですが、Oracle 固有の機能 (PL/SQL を含む) を使用する必要がある場合でも問題ありません。

ベストアンサー1

create view horrible_query_1_VIEW as 
 select .. ...
  from .. .. ..

create view ugly_query_2_VIEW as 
 select .. ...
  from .. .. ..

それから

(horrible_query_1_VIEW) minus (ugly_query_2_VIEW)

(ugly_query_2_VIEW) minus (horrible_query_1_VIEW)

あるいは、次のようにもできますwith clause:

with horrible_query_1 as (
  select .. .. ..
    from .. .. ..
) ,
ugly_query_2 as (
  select .. .. ..
     .. .. ..
)
(select * from horrible_query_1 minus select * from ugly_query_2    ) union all
(select * from ugly_query_2     minus select * from horrible_query_1)

おすすめ記事