2013-03-25 21 views
4

我正在运行一些查询,并遇到了一些我认为看起来像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 63年5月1日,使用SequelPro作为客户端上的OS X.

更新: 也试图在一个MySQL 5.4.3安装和字段显示正确那里。也许这是5.1.x代码库中的一个错误?

+0

你能告诉你如何运行查询吗?是mysql命令行客户端还是其他一些工具? – 2013-03-25 18:29:34

+0

@woz:在这种情况下,似乎是合理的。请实际阅读这个问题。 – 2013-03-25 18:30:17

+0

@Dukeling:谢谢,很好。 OP:请减少问题中的代码。 – 2013-03-25 18:34:30

回答

1

因此,做了一些研究,似乎我发现了原来的bug。早在5.0年就有报道说,它的目标只能是修复到5.2。

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

因此,看来如果你正在运行MySQL 5.1.x中,你会遇到这个问题。 MySQL的回应似乎只是升级到更新的版本。