以下帖子具有令人信服的理由,通常避免select *在SQL中使用 。
select *
为什么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
既然你已经正确地列出了列名cte,我看不出在使用任何伤害select *从cte。 实际上,这可能是使用的正确位置select *,因为没有必要列出两次列。 除非 您不需要使用所返回的所有列cte。(例如cte,查询中使用的列,但select子句中不使用)。在这种情况下,我建议仅列出您甚至from指向a所需的列cte。
cte
select
请注意,如果它cte本身使用了,select *那么链接到的帖子中列出的所有缺点都将适用于它。
我的主要反对意见select *是,懒惰的开发人员通常会使用它,而不考虑的后果*。
*
注意: 我在这里编写的所有内容也适用于派生表。