如果您有一个使用许多表但未返回任何行的复杂查询,您应该使用以下过程找出问题所在:
测试查询
EXPLAIN
以检查是否可以找到明显错误的内容。请参阅第 13.8.2 节,“EXPLAIN 语句”。WHERE
仅选择子句 中使用的那些列 。从查询中一次删除一个表,直到它返回一些行。如果表很大,最好
LIMIT 10
与查询一起使用。SELECT
为应该与最后从查询中删除的表匹配行的列 发出 a 。如果您正在比较
FLOAT
或DOUBLE
列中包含带小数的数字,则不能使用相等 (=
) 比较。这个问题在大多数计算机语言中都很常见,因为并非所有浮点值都可以精确存储。在某些情况下,将 更改FLOAT
为 a 可以DOUBLE
解决此问题。请参阅 第 B.3.4.8 节,“浮点值问题”。如果您仍然无法找出问题所在,请创建一个可以运行的最小测试来
mysql test < query.sql
显示您的问题。您可以通过使用mysqldump --quick db_nametbl_name_1
...tbl_name_n
> query.sql转储表来创建测试文件 。在编辑器中打开文件,删除一些插入行(如果需要多行来证明问题),然后SELECT
在文件末尾添加您的语句。通过执行以下命令验证测试文件是否演示了问题:
$> mysqladmin create test2 $> mysql test2 < query.sql
将测试文件附加到错误报告中,您可以使用第 1.6 节“如何报告错误或问题”中的说明来提交该错误报告。