我有多个查询要合并,所有这些查询都有自己的连接,很难重新编写和绑定在一起。是否有一种简单的方法来组合多个语句的结果,在块中处理它们?
的例子:查询1
WITH Table1a AS (...)
WITH Table2a AS (...)
SELECT multiple_arguments FROM multiple_joined_tables
生成如下表
CTE可以引用在它之前的其他CTE。所以你有两种方法来做你想做的。要么"nest"或者在最后的查询中引用所有的cte。
我个人通常会选择选项2,因为"嵌套"。cte有时似乎会产生次优的查询计划。但是,如果选项1使代码在您的特定情况下更易于维护,请继续尝试,只需关注性能。
下面是两个方法的例子。显然,我希望CTE中的查询要复杂得多(否则就不需要CTE了,我们只需要直接连接表T
和U
)。为了演示这个方法,我尽量保持简单。
create table T (i int, t char);
create table U (i int, u char);
-- option 1: combine in CTEs
with
MyT as
(
select i, t from T
), -- note the comma here, and no additional "with"
MyTandU as
(
select MyT.i,
MyT.t,
U.u
from MyT -- referring to the previous CTE
join U on U.i = myT.i
)
select i, t, u from MyTandU;
-- option 2: combine final select
with
MyT as (select i, t from T),
MyU as (select i, u from U)
select MyT.i, MyT.t, MyU.u
from MyT
join MyU on MyU.i = MyT.i
听起来你想要一个视图。对于视图,您可以获取查询结果并为其指定名称——然后您可以像使用表一样重用该名称。
让你的第一个查询成为一个视图。您可以在第二个查询中使用它。