MySQL 8.4 Release Notes
B.3.4.7 解决没有匹配行的问题
如果您有一个复杂的查询,它使用了许多表格但返回了无行,您应该按照以下步骤来找出问题所在:
-
使用
EXPLAIN
来检查是否能找到明显的问题。请参阅第15.8.2节,“EXPLAIN 语句”。 -
只选择WHERE子句中使用的列。
-
逐个从查询中移除表格,直到它返回一些行。如果表格很大,建议使用
LIMIT 10
与查询一起使用。 -
执行一个针对应该与被移除的最后一张表匹配的列的
SELECT
语句。 -
如果您正在比较
FLOAT
或DOUBLE
类型的列与带有小数的数字,您不能使用等于 (=
) 的比较。这在大多数计算机语言中都很常见,因为并不是所有浮点数值都可以精确存储。在某些情况下,改变FLOAT
到DOUBLE
可以解决这个问题。请参阅第B.3.4.8节,“浮点数值的问题”。 -
如果您仍然无法找出问题所在,请创建一个最小化的测试文件,该文件可以使用
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节,“如何报告错误或问题”中的说明进行提交。