DiGiD Asked: 2018-04-11 08:20:47 +0800 CST2018-04-11 08:20:47 +0800 CST 2018-04-11 08:20:47 +0800 CST 是否有正当理由将列别名为完全相同的名称/大小写? 772 我继承了一些这样的代码: SELECT Col_1, Col_2 Col_2, Col_3 ... 别名是否Col_2真的完成了任何事情,还是完全不需要? select alias 4 个回答 Voted Best Answer David Spillett 2018-04-11T08:49:49+08:002018-04-11T08:49:49+08:00 在您的问题中提供的代码中,没有没有必要,但不会引起任何问题。别名可能在那里,因为列名曾经不同并且已被重命名,对它的引用通过某种自动方法更新。 我有时会故意将列别名为相同的名称,只是为了在处理许多列时保持行语法对齐,其中一些列有别名,而另一些则不是这样: SELECT tbl1.col1 AS column1 , tbl1.anothercolumn AS column2 , tbl1.column3 AS column3 , tbl2.somevalue AS column4 FROM ... 这里第 3 列指定了一个不需要的别名,因为无论如何输出都会具有所需的名称。 Erik Darling 2018-04-11T08:47:46+08:002018-04-11T08:47:46+08:00 如果两个表共享一个列名,我认为这是一个有效的用例。例如,在Stack Overflow 架构中: SELECT TOP 10 p.Id, p.CreationDate, p.OwnerUserId, p.Score, c.CreationDate, c.Score FROM dbo.Posts AS p JOIN dbo.Comments AS c ON p.Id = c.PostId; 两者Posts和Comments都有名为CreationDateand的列Score。如果我将这些结果返回给最终用户,他们就看不到表别名,因此不可能知道哪个属于Posts和哪个属于Comments。 我可以给事物起别名以使其更清楚。 SELECT TOP 10 p.Id, p.CreationDate AS CreationDate, p.OwnerUserId, p.Score AS Score, c.CreationDate AS CommentCreationDate, c.Score AS CommentScore FROM dbo.Posts AS p JOIN dbo.Comments AS c ON p.Id = c.PostId; 现在,将列作为它们的名称的别名除了向未来的开发人员指出您知道列名称的重复之外没有任何意义。这有助于通过长选择列表和未格式化的代码提供清晰性和少量自我文档。 JasonBluefire 2018-04-11T09:14:48+08:002018-04-11T09:14:48+08:00 唯一的原因是 Proc 的可读性 SELECT [First Name] = a.[FirstName], [Middle Name]= a.[Middle Name], [Last Name] = a.[LastName], [DOB] = b.[DOB] ... 看起来更干净,更容易快速阅读 SELECT [First Name] = a.[FirstName], a.[Middle Name], [Last Name] = a.[LastName], b.[DOB] ... 特别是如果您有大型案例陈述或数据操作。 但总的来说,我认为这主要是个人喜好。 编辑:我的示例适用于 Microsoft sql-server,当我回答时,这个问题被标记了。 Joe W 2018-04-11T08:48:09+08:002018-04-11T08:48:09+08:00 除非您将其更改为数据库中的列名之外的其他名称,否则无需为列名起别名。 这个选择 SELECT Col_1, Col_2 Col_2, Col_3 ... 而这个选择 SELECT Col_1, Col_2, Col_3 ... 两者都会向最终用户返回相同的列名,因此在这种情况下,无需添加别名,因为它不会影响返回的结果或列名。 关于 sp_BlitzErik 提出的重复列名,这将取决于您的 rdms 软件,因为根据您使用的软件,它会自动更改重复的列名,以便结果集没有任何重复的列名。例如 Oracle (11g) 为第 2、3 列添加 _1、_2 并遵循每个重复列的模式,
在您的问题中提供的代码中,没有没有必要,但不会引起任何问题。别名可能在那里,因为列名曾经不同并且已被重命名,对它的引用通过某种自动方法更新。
我有时会故意将列别名为相同的名称,只是为了在处理许多列时保持行语法对齐,其中一些列有别名,而另一些则不是这样:
这里第 3 列指定了一个不需要的别名,因为无论如何输出都会具有所需的名称。
如果两个表共享一个列名,我认为这是一个有效的用例。例如,在Stack Overflow 架构中:
两者
Posts
和Comments
都有名为CreationDate
and的列Score
。如果我将这些结果返回给最终用户,他们就看不到表别名,因此不可能知道哪个属于Posts
和哪个属于Comments
。我可以给事物起别名以使其更清楚。
现在,将列作为它们的名称的别名除了向未来的开发人员指出您知道列名称的重复之外没有任何意义。这有助于通过长选择列表和未格式化的代码提供清晰性和少量自我文档。
唯一的原因是 Proc 的可读性
看起来更干净,更容易快速阅读
特别是如果您有大型案例陈述或数据操作。
但总的来说,我认为这主要是个人喜好。
编辑:我的示例适用于 Microsoft sql-server,当我回答时,这个问题被标记了。
除非您将其更改为数据库中的列名之外的其他名称,否则无需为列名起别名。
这个选择
而这个选择
两者都会向最终用户返回相同的列名,因此在这种情况下,无需添加别名,因为它不会影响返回的结果或列名。
关于 sp_BlitzErik 提出的重复列名,这将取决于您的 rdms 软件,因为根据您使用的软件,它会自动更改重复的列名,以便结果集没有任何重复的列名。例如 Oracle (11g) 为第 2、3 列添加 _1、_2 并遵循每个重复列的模式,