我正在運行一些查詢,並遇到了一些我認爲看起來像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