gpt4 book ai didi

SQL Server - 表变量与带有 union 的 select 语句的临时表

转载 作者:行者123 更新时间:2023-12-04 22:11:04 24 4
gpt4 key购买 nike

我需要从一个复杂的选择查询创建一些连接的列,它是三个选择的联合

SELECT C1,C2, ... FROM Source1
UNION
SELECT C1,C2,... FROM Source2
UNION
SELECT C1,C2 from Source3

现在,我没有在所有三个 select 语句中重复我的新列的生成逻辑,而是想到使用一个表变量来临时存储联合结果,并将我的列添加到一个从表变量中选择的列中。所以像

DECLARE @tv TABLE
(C1 varchar(max),
C2 varchar(max)
.
.
.)

INSERT INTO @tv
SELECT C1,C2, ... FROM Source1
UNION
SELECT C1,C2,... FROM Source2
UNION
SELECT C1,C2 from Source3

SELECT
C1,
C2,
CASE WHEN ...
ELSE ''
END CN
FROM @tv

我已经阅读了使用表变量时要注意的性能注意事项。上面的查询有时可能会生成几千行,但在大多数情况下会生成几百行。在这种情况下切换到临时变量会更好吗? UNION SELECT 语句是否仍然能够并行运行?

最佳答案

将列生成逻辑放在一个地方是个好主意。我只想用子查询来做到这一点:

SELECT s.*,
(CASE WHEN ...
ELSE ''
END) as CN
FROM (SELECT C1,C2, ... FROM Source1
UNION ALL
SELECT C1,C2,... FROM Source2
UNION ALL
SELECT C1,C2 from Source3
) s;

注意:使用 UNION ALL 而不是 UNION,除非您特别想承担删除重复项的开销。

关于SQL Server - 表变量与带有 union 的 select 语句的临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41874362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com