如果有使用了很多表的復雜查詢,但未返回任何行,應采用下述步驟找出什麼出錯:
用EXPLAIN測試查詢,以檢查是否發現某事顯然出錯。
僅選擇在WHERE子句中使用的列。
從查詢中1次刪除1個表,直至返回了某些行為止。如果表很大,較好的主意是在查詢中使用LIMIT 10。
對於具有與上次從查詢中刪除的表匹配的行的列,發出SELECT查詢。
如果將FLOAT或DOUBLE列與具有數值類型的數值進行比較,不能使用等式(=)比較。在大多數計算機語言中,該問題很常見,這是因為,並非所有的浮點值均能以准確的精度保存。在某些情況下,將FLOAT更改為DOUBLE可更正該問題。請參見A.5.8節,“與浮點比較有關的問題”。
如果仍不能找出問題之所在,請創建能與顯示問題的“mysql test < query.sql”一起運行的最小測試。通過使用MySQLdump --quick db_name tbl_name_1 ... tbl_name_n > query.sql轉儲表,可創建測試文件。在編輯器中打開文件,刪除某些插入的行(如果有超出演示問題所需的行),並在文件末尾添加SELECT語句。
通過執行下述命令,驗證測試文件能演示問題:
shell> mysqladmin create test2 shell> MySQL test2 < query.sql
使用mysqlbug將測試文件張貼到喲娜通用MySQL郵件列表。