【问题标题】:Why is the result column of a subquery not using my alias as the column name? [duplicate]为什么子查询的结果列不使用我的别名作为列名? [复制]
【发布时间】:2014-08-06 20:34:58
【问题描述】:

这是我的查询:

SELECT  messages.*, 
        units.*, 
        MAX(messages.created_at) AS 'conversation_date', 
        (select count(*) as messages from messages where unit_id = units.id), 
        WEEKOFYEAR(MAX(messages.created_at)) as 'woy', 
        YEAR(MAX(messages.created_at)) as 'year',
        classifications.description AS 'classification'
FROM    messages 
JOIN    units ON units.id = messages.unit_id
JOIN    classifications ON units.classification_id = classifications.id
WHERE   from_id <> units.creator_id GROUP BY messages.unit_id, from_id, to_id

我正在尝试将第 4 列命名为 "messages",但返回的名称实际上是 "(select count(*) as messages from messages where unit_id = units.id)"

我做错了什么?

【问题讨论】:

  • 嗯,你能发布错误信息吗?我认为这会有所帮助。说真的,请帮助我们帮助您,给我们一些信息,您使用的是什么 RDBMS?
  • 我得到一个名为“(select count(*) as messages from messages where unit_id = units.id)”的字段,而不是我想要的名为 messages 的字段
  • 这根本不是语法错误,您只需为该列提供别名(select ....) AS Messages
  • 我现在意识到了这一点,我重新运行了查询并得到了它。我会换个问题
  • @billinkc ...应该根据意见关闭

标签: sql columnname column-alias


【解决方案1】:

要给子查询结果命名(即别名),不要将别名放在子查询内,而是在子查询外对其进行编码,如下所示:

select
...
(select count(*) from messages where unit_id = units.id) as messages
...

如果不为整个子查询提供别名,则为子查询结果提供的列名就是子查询本身(这是您陈述的问题)-最后一句)。

【讨论】:

  • 认真的吗?不。认真的吗?
  • 如果我不得不猜测(我真的不认为我有),@swasheck 是在谈论你回答一个应该首先被关闭并且已经被回答的问题在评论中
  • 我认为没有必要。这是一个询问如何为列赋予别名的问题
  • @Bohemian 只有当我们可以再次作为骗子 vtc 时
  • 但是答案真的没必要是DV
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多