MySQL 8.3 Release Notes
如果您有一个复杂的查询,它使用了许多表,但是没有返回任何行,那么您应该按照以下步骤来查找问题所在:
-
使用
EXPLAIN
测试查询,以检查是否可以找到明显错误。见 第 15.8.2 节,“EXPLAIN 语句”。 -
仅选择 WHERE 子句中使用的那些列。
-
从查询中逐一删除表,直到返回一些行。如果表很大,使用
LIMIT 10
是一个好主意。 -
针对最后一个从查询中删除的表,发出一个
SELECT
语句,以检查该列是否匹配了一行。 -
如果您比较
FLOAT
或DOUBLE
列与带小数的数字,您不能使用相等(=
)比较。这是一个常见的问题,因为大多数计算机语言都不能以 exact 精度存储所有浮点值。在某些情况下,将FLOAT
更改为DOUBLE
可以解决这个问题。见 第 B.3.4.8 节,“浮点数值的问题”。 -
如果您仍然无法找到问题所在,请创建一个最小的测试文件,可以使用
mysql test < query.sql
运行该文件,以展示您的问题。您可以使用 mysqldump --quick db_nametbl_name_1
...tbl_name_n
> query.sql 将表 덤프到文件中,然后在编辑器中打开该文件,删除一些插入行(如果有多余的行),并在文件末尾添加您的SELECT
语句。通过执行以下命令来验证测试文件是否展示了问题:
$> mysqladmin create test2 $> mysql test2 < query.sql
将测试文件附加到错误报告中,按照 第 1.5 节,“如何报告错误或问题” 中的说明进行操作。