gpt4 book ai didi

sql - 使用公用表表达式进行简单选择

转载 作者:行者123 更新时间:2023-12-02 02:25:09 26 4
gpt4 key购买 nike

我注意到在我们的项目中使用了以下公用表表达式来从 View 中执行简单的选择:

WITH CTE_View_Alias AS
(
SELECT
Id,
Column1,
Column2
FROM VW_View
),
CTE_Foo AS
(
SELECT
B.Bar_Id,
V.Column1
FROM VW_Bar B
INNER JOIN CTE_View_Alias V
ON B.View_Id = V.Id
)

CTE 仅在另一个地方使用,另一个 CTE。 CTE 中的列是 View 列的子集。

使用它有好处吗?为什么不直接引用 View 呢?不幸的是,这些sql语句的始作俑者已经不在公司了。对我来说,这会降低可读性,但如果我的经验不足导致我看不到,我不想消除它。

最佳答案

两者之间没有区别:

WITH CTE_View_Alias AS (
SELECT v.id,
v.column1,
v.column2
FROM VW_View v)
SELECT t.*
FROM CTE_View_Alias t

...和:

SELECT v.id,
v.column1,
v.column2
FROM VW_View v

这个观点似乎也不是必需的,但这不是提出的问题......

前面提到的选项与派生表之间也没有性能差异:

 SELECT x.*
FROM (SELECT v.id,
v.column1,
v.column2
FROM VW_View v) x

CTE 是派生表的语法糖,如果不使用递归功能

结论

您必须询问作者他们为什么选择使用 CTE。可能有更复杂的操作被删除,并且 CTE 保持原样,因为担心会破坏无法预料的东西。或者这只是他们想要使用的功能...

我总是担心像这样的问题过于抽象/简化而无法证明决策。

关于sql - 使用公用表表达式进行简单选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286121/

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