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