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