Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 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 列与带小数的数字,您不能使用相等(=)比较。这是一个常见的问题,因为大多数计算机语言都不能以 exact 精度存储所有浮点值。在某些情况下,将 FLOAT 更改为 DOUBLE 可以解决这个问题。见 第 B.3.4.8 节,“浮点数值的问题”

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

    通过执行以下命令来验证测试文件是否展示了问题:

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

    将测试文件附加到错误报告中,按照 第 1.5 节,“如何报告错误或问题” 中的说明进行操作。