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

时间:2013-03-25 18:24:12

标签: 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)),
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,在OS X上使用SequelPro作为客户端。

更新 还在MySQL 5.4.3安装上尝试了它,并且该字段在那里正确显示。也许这是5.1.x代码库中的一个错误?

1 个答案:

答案 0 :(得分:1)

所以,做了一些研究,似乎我找到了原始的bug。不久之前在5.0中报道过,它的目标只是固定到5.2。

http://bugs.mysql.com/bug.php?id=25224

因此,似乎如果您运行MySQL 5.1.x,您将遇到此问题。似乎MySQL的响应只是升级到更新的版本。