小编典典

如何在不重复的情况下重用大型查询?

sql

如果我有两个查询,分别称为horrible_query_1ugly_query_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),那就可以了。


阅读 161

收藏
2021-03-17

共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)
2021-03-17