小编典典

最佳做法:在CTE上选择*

sql

以下帖子具有令人信服的理由,通常避免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

阅读 199

收藏
2021-04-07

共1个答案

小编典典

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

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

我的主要反对意见select *是,懒惰的开发人员通常会使用它,而不考虑的后果*

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

2021-04-07