【问题标题】:sql alias fieldsql别名字段
【发布时间】:2011-02-28 00:59:13
【问题描述】:

在 SQL 中,假设我需要在 having 子句中引用一个别名字段,但别名有引号,我该怎么做?

select (select...) as '005'
group by ...
having '005'>0

【问题讨论】:

    标签: sql mysql column-alias


    【解决方案1】:

    我认为您缺少 FROM 子句,您应该使用反引号而不是单引号:

    SELECT (SELECT ...) AS `005`
    FROM table1
    GROUP BY ...
    HAVING `005` > 0
    

    如果您发布完整的查询会有所帮助,因为我在这里猜测您想要做什么。

    【讨论】:

    • 正如马克所说,问题在于您使用的是单引号而不是反引号,这使得别名被视为字符串文字。在选择部分,别名可以使用普通引号,但在其他任何使用它的地方都需要使用反引号。
    • 你们是对的,如果我使用反引号而不是单引号,别名就可以了!谢谢
    【解决方案2】:

    SQL-92 标准定义对列别名使用双引号,而不是单引号。在大多数数据库中,仅当您使用双引号时才允许使用不寻常的字符。

    也就是说,并非所有数据库都支持在 GROUP BYHAVING 子句中引用列别名(在同一查询中)。对于可移植查询,我不推荐在GROUP BYHAVING 子句中引用列别名的做法。此外,HAVING 子句用于聚合 - 您提供的简化示例应该会触发错误,因为没有对 005 列别名执行聚合函数(IE:COUNT、AVG、MIN/MAX 等)。

    以下在 MySQL 4.1 上适用于我:

      SELECT COUNT(*) AS "005"
        FROM TABLE t
    GROUP BY ...
      HAVING `005` > 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多