这是MySQL查询解析中的错误吗?

这是MySQL查询解析中的错误吗?,mysql,Mysql,我运行了一些查询,遇到了一些我认为看起来像MySQL错误的东西。我运行了以下查询: select s.id, a.name as a_name, s.label, st.name as st_name, -- substr(f.name FROM 1 FOR locate('cl', f.name)-2), -- substr(f.name FROM locate('cl', f.name)-2 FOR 1), substr(f.name FROM locate('cl', f.name)),

我运行了一些查询,遇到了一些我认为看起来像MySQL错误的东西。我运行了以下查询:

select s.id, a.name as a_name, s.label, st.name as st_name,
-- substr(f.name FROM 1 FOR locate('cl', f.name)-2),
-- substr(f.name FROM locate('cl', f.name)-2 FOR 1),
substr(f.name FROM locate('cl', f.name)),
count(1)
from table_sf sf,
table_f f,
table_s s,
table_a a,
table_st st
where f.id = sf.f_id
and s.id = sf.s_id
and s.a_id = a.id
and s.st_id = st.id
group by 1, 2, 3, 4, 5
having count(1) != 2;
默认情况下,当您没有在计算字段上指定列名时,MySQL会指定列名。通常,它只是字段的完整“公式”,例如,上面查询中最后一个字段的
count(1)
。然而,在查询中添加注释似乎会使MySQL失去作用。结果是正确的,但字段名完全错误。以下是我得到的列标题:

 id    name         label         name       -- substr(f.name FROM 1 FOR locate('cl', f.name)-2),       count(1)
请注意,第5列的名称是第一条注释,而不是相邻的注释。它确实认识到有两个注释,因为它只将第一个注释指定为下一个计算字段的列名,而没有别名。这是预期的行为吗?或者这是一个MySQL错误?我正在运行MySQL 5.1.63,在OSX上使用SequelPro作为客户端

更新:
在MySQL5.4.3安装中也尝试过,该字段显示正确。也许这是5.1.x代码库中的一个bug?

所以,我做了一些研究,似乎发现了原来的bug。不久前在5.0版中就有报道,在5.2版之前,它只针对修复


所以,如果您运行的是MySQL 5.1.x,那么您可能会遇到这个问题。MySQL的反应似乎只是升级到一个新版本。

您能告诉我如何运行查询吗?是mysql命令行客户端还是其他工具?@woz:在这种情况下,这似乎是合理的。请仔细阅读问题。@Dukeling:谢谢,说得好。OP:请减少你问题中的代码。删除我的评论,因为我不确定它是否完全相同,但是。