我正在运行一些查询,并遇到了一些我认为看起来像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代码库中的一个错误?
你能告诉你如何运行查询吗?是mysql命令行客户端还是其他一些工具? – 2013-03-25 18:29:34
@woz:在这种情况下,似乎是合理的。请实际阅读这个问题。 – 2013-03-25 18:30:17
@Dukeling:谢谢,很好。 OP:请减少问题中的代码。 – 2013-03-25 18:34:30