最佳实践:在CTE上选择*

aba*_*n99 5 sql common-table-expression

以下帖子有令人信服的理由通常避免select *在SQL中使用 .

为什么SELECT*被认为有害?

在讨论中是使用或不可接受的示例select * 但是我没有看到关于公用表表达式(CTE)的讨论.select *在CTE中使用有任何缺点吗?

例:

WITH CTE1 AS
(
    SELECT Doc, TotalDue
    FROM ARInvoices
    WHERE CustomerName = 'ABC'
    UNION
    SELECT Doc, - TotalDue
    FROM ARInvoiceMemos
    WHERE CustomerName = 'ABC'
)

select * from CTE1
UNION
Select 'Total' as Doc, sum(TotalDue)
FROM CTE1
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 6

既然你已经正确地列出了列名cte,我看不出在使用任何伤害select *cte
事实上,它可能是使用的正确位置select *,因为没有必要将列列出两次。
除非您不需要使用cte. (即cte查询中使用了 the 中的列,但不在select子句中)在这种情况下,我建议仅列出您需要的列,即使 from 指向 a cte

请注意,如果它cte本身使用,select *那么您链接到的帖子中列出的所有缺点都适用于它。

我的主要反对意见select *是它通常被懒惰的开发人员使用,他们不考虑*.

注意:我在这里写的所有内容也适用于派生表。