Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Solving Problems with No Matching Rows

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

如果您有一个复杂的查询,它使用了许多表格但返回了无行,您应该按照以下步骤来找出问题所在:

  1. 使用 EXPLAIN 来检查是否能找到明显的问题。请参阅第15.8.2节,“EXPLAIN 语句”

  2. 只选择WHERE子句中使用的列。

  3. 逐个从查询中移除表格,直到它返回一些行。如果表格很大,建议使用 LIMIT 10 与查询一起使用。

  4. 执行一个针对应该与被移除的最后一张表匹配的列的 SELECT 语句。

  5. 如果您正在比较 FLOATDOUBLE 类型的列与带有小数的数字,您不能使用等于 (=) 的比较。这在大多数计算机语言中都很常见,因为并不是所有浮点数值都可以精确存储。在某些情况下,改变 FLOATDOUBLE 可以解决这个问题。请参阅第B.3.4.8节,“浮点数值的问题”

  6. 如果您仍然无法找出问题所在,请创建一个最小化的测试文件,该文件可以使用 mysql test < query.sql 运行以显示问题。您可以通过 mysqldump --quick db_name <em class="replaceable">tbl_name_1… <em class="replaceable">tbl_name_n> query.sql 将表格导出到文件中。打开该文件,在编辑器中删除一些插入行(如果有多余的以便展示问题),并在文件末尾添加您的 SELECT 语句。

    验证测试文件是否正确地展示了问题,然后执行以下命令:

    $> mysqladmin create test2
    $> mysql test2 < query.sql

    将测试文件附加到一个错误报告中,该报告可以通过第1.6节,“如何报告错误或问题”中的说明进行提交。