AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 203522
Accepted
DiGiD
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 4 个回答
  • 2016 Views

4 个回答

  • Voted
  1. 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 列指定了一个不需要的别名,因为无论如何输出都会具有所需的名称。

    • 5
  2. 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;
    

    现在,将列作为它们的名称的别名除了向未来的开发人员指出您知道列名称的重复之外没有任何意义。这有助于通过长选择列表和未格式化的代码提供清晰性和少量自我文档。

    • 3
  3. 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,当我回答时,这个问题被标记了。

    • 2
  4. 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 并遵循每个重复列的模式,

    • -1

相关问题

  • 将数据库数据转移到另一列

  • 如何在选择(SQL Server)中使用变量?

  • 复杂的mysql选择

  • "对于每组满足条件X的结果,只选择列值A最小的结果"

  • 如何从 SHOW TABLE STATUS 结果中选择

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve