Documentation Home

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

如果您有一个使用许多表但未返回任何行的复杂查询,您应该使用以下过程找出问题所在:

  1. 测试查询EXPLAIN 以检查是否可以找到明显错误的内容。请参阅第 13.8.2 节,“EXPLAIN 语句”

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

  3. 从查询中一次删除一个表,直到它返回一些行。如果表很大,最好LIMIT 10与查询一起使用。

  4. SELECT为应该与最后从查询中删除的表匹配行的列 发出 a 。

  5. 如果您正在比较FLOATDOUBLE列中包含带小数的数字,则不能使用相等 ( =) 比较。这个问题在大多数计算机语言中都很常见,因为并非所有浮点值都可以精确存储。在某些情况下,将 更改FLOAT为 a 可以 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.6 节“如何报告错误或问题”中的说明来提交该错误报告。