いくつかのクエリを実行していて、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番目の列には、隣接するコメントではなく、最初のコメントが名前として付けられていることに注意してください。また、エイリアスなしで次の計算フィールドの列名として最初のコメントのみが割り当てられたため、2つのコメントがあることを認識しました。これは予想される動作ですか?それともこれはMySQLのバグですか?OSXのクライアントとしてSequelProを使用してMySQL5.1.63を実行しています。
更新: MySQL 5.4.3のインストールでも試してみたところ、フィールドが正しく表示されています。多分それは5.1.xコードベースのバグですか?