gpt4 book ai didi

sql - 如何跨 UNION 重复 SQL 查询的部分? (SQL 中的 DRY)

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

我有一个查询返回三个联合查询的结果。每个查询都有一个冗长的选择语句。 select 语句的某些部分如下所示:

coalesce(a.fact1,'Fact1'),
coalesce(b.fact1,'Fact2')
...

from/join 部分也很大

from table1 t1
join table2 t2 on t1.id = t2.t1_id
join table3 t3 on t2.id = t3.t2_id

等这些 block 中的每一个在所有三个 SELECT 语句中重复相同。

我想知道是否有一种方法可以将那段代码(一段字段名称或一段连接语句)放到一个我可以在一行中引用它们的地方。有点像迷你 View /功能,但只是作为文本替换。这样,我可以一次性编辑这些内容,而不必单独编辑每个 select 语句的相关位。

这是在 MSSQL 中。有什么方法可以做我想解释的事情吗?


更新

select a.field1, b.field2, c.field3 
from table1 a
join table2 b on a.id = b.table1_id
join table3 c on b.id = c.table2_id
where cond1 = 'Pos Condition'
AND cond2 = 'Test'

union

select a.field1, b.field2, d.field3
from table1 a
join table2 b on a.id = b.table1_id
join table3 c on b.id = c.table2_id
join table4 d on c.id = d.table3_id
where cond1 = 'Pos Condition'
AND cond2 = 'Second Type of Result'

每个字段中的数据根据​​结果类型略有变化。我想把 from table1 -> join table3 部分放在一个单独的地方,这样我就可以重复插入它

最佳答案

您在问题中给出的示例可以重构为 CTE 罚款。

WITH CTE
AS (SELECT a.field1,
b.field2,
c.field3,
c.id AS c_id
FROM table1 a
JOIN table2 b
ON a.id = b.table1_id
JOIN table3 c
ON b.id = c.table2_id
WHERE cond1 = 'Pos Condition')
SELECT field1,
field2,
field3
FROM CTE
WHERE cond2 = 'Test'
UNION
SELECT field1,
field2,
d.field3
FROM CTE c
JOIN table4 d
ON c_id = d.table3_id
WHERE cond2 = 'Second Type of Result'

关于sql - 如何跨 UNION 重复 SQL 查询的部分? (SQL 中的 DRY),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8660100/

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