按语句列名称解析

时间:2014-09-04 10:01:07

标签: mysql sql group-by

我有这样的查询(实际上有更多列)

select 
    custom_amend_column_function(colname) as colname
from source_table
group by colname

我经常使用这个构造。它似乎总是使用函数的输出而不是输入来分组数据。 今天我第一次将这个语句直接运行到这样的新表中:

create table new_table as
select 
    custom_amend_column_function(colname) as colname
from source_table
group by colname

奇怪的是,通过添加第一行,我收到一条错误消息,我的查询在组语句中使用了一个不明确的列名。

由于group by可以使用新的列名(即下面的作品)我总是希望group by首先使用select语句中定义的列,然后查看基础表是否找不到名称。

select 
    custom_amend_column_function(colname) as new_colname
from source_table
group by new_colname

我是对的吗?错误消息是对的吗?我无法找到任何记录SQL标准或MySQL的地方。

我知道我可以通过创建一个新的列名来避免这种情况,但我想弄清楚这一点,因为我可能需要检查现有的查询,如果它确实含糊不清。

1 个答案:

答案 0 :(得分:2)

要追踪问题,请执行

 EXPLAIN EXTENDED SELECT ...

在您的查询上。除了正常输出之外,这将为您提供包含优化程序所看到的查询的警告。所有隐式重命名都在此处完成,因此您可以看到列名称不明确的原因。

我认为你可以通过说

来解决这个问题
 ... GROUP BY 1

而不是在组中提供列名。