4

我正在运行一些查询,并遇到了我认为看起来像 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 代码库中的错误?

4

1 回答 1

1

所以,做了一些研究,似乎我找到了原来的错误。前段时间在 5.0 中被报道过,并且只针对 5.2 进行修复。

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

所以,如果你运行 MySQL 5.1.x,你会遇到这个问题。MySQL 的反应似乎只是升级到更新的版本。

于 2013-03-29T04:55:47.150 回答