组合不同(冗长)SQL语句列的最简单方法- MSSQL



我有多个查询要合并,所有这些查询都有自己的连接,很难重新编写和绑定在一起。是否有一种简单的方法来组合多个语句的结果,在块中处理它们?

的例子:查询1

WITH Table1a AS (...)
WITH Table2a AS (...)
SELECT multiple_arguments FROM multiple_joined_tables

生成如下表

<表类>用户IDDatasetA其他数据tbody><<tr>Test11dataA1other_data1Test22dataA2other_data2Test33dataA3other_data3Test44dataA4other_data4

CTE可以引用在它之前的其他CTE。所以你有两种方法来做你想做的。要么"nest"或者在最后的查询中引用所有的cte。

我个人通常会选择选项2,因为"嵌套"。cte有时似乎会产生次优的查询计划。但是,如果选项1使代码在您的特定情况下更易于维护,请继续尝试,只需关注性能。

下面是两个方法的例子。显然,我希望CTE中的查询要复杂得多(否则就不需要CTE了,我们只需要直接连接表TU)。为了演示这个方法,我尽量保持简单。

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

听起来你想要一个视图。对于视图,您可以获取查询结果并为其指定名称——然后您可以像使用表一样重用该名称。

让你的第一个查询成为一个视图。您可以在第二个查询中使用它。

相关内容

  • 没有找到相关文章

最新更新