B.4.4.7 解决没有匹配行的问题

如果您有一个使用许多 table 但不返回任何行的复杂查询,则应使用以下过程找出错误所在:

  • 使用EXPLAIN测试查询,以检查是否可以找到明显错误的内容。参见第 13.8.2 节“ EXPLAIN 语句”

  • 仅选择WHERE子句中使用的那些列。

  • 从查询中一次删除一个 table,直到返回一些行。如果 table 很大,则对查询使用LIMIT 10是个好主意。

  • 为应该与上次从查询中删除的 table 相匹配的行的列发出SELECT

  • 如果将FLOATDOUBLE列与带有小数的数字进行比较,则不能使用相等(=)比较。在大多数计算机语言中,此问题很常见,因为并非所有浮点值都可以精确地存储。在某些情况下,将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 节“如何报告错误或问题”中的说明进行归档。