我有这样的查询(实际上有更多列)
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的地方。
我知道我可以通过创建一个新的列名来避免这种情况,但我想弄清楚这一点,因为我可能需要检查现有的查询,如果它确实含糊不清。
答案 0 :(得分:2)
要追踪问题,请执行
EXPLAIN EXTENDED SELECT ...
在您的查询上。除了正常输出之外,这将为您提供包含优化程序所看到的查询的警告。所有隐式重命名都在此处完成,因此您可以看到列名称不明确的原因。
我认为你可以通过说
来解决这个问题 ... GROUP BY 1
而不是在组中提供列名。