2013-03-25 20 views
4

我正在運行一些查詢,並遇到了一些我認爲看起來像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代碼庫中的一個錯誤?

+0

你能告訴你如何運行查詢嗎?是mysql命令行客戶端還是其他一些工具? – 2013-03-25 18:29:34

+0

@woz:在這種情況下,似乎是合理的。請實際閱讀這個問題。 – 2013-03-25 18:30:17

+0

@Dukeling:謝謝,很好。 OP:請減少問題中的代碼。 – 2013-03-25 18:34:30

回答

1

因此,做了一些研究,似乎我發現了原來的bug。早在5.0年就有報道說,它的目標只能是修復到5.2。

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

因此,看來如果你正在運行MySQL 5.1.x中,你會遇到這個問題。 MySQL的迴應似乎只是升級到更新的版本。