MySQL 9.0 发行说明
如果您有一个使用多个表的复杂查询,但没有返回任何行,您应该使用以下步骤来找出问题所在。
使用
EXPLAIN
测试查询,检查您是否可以找到明显错误的东西。参见 第 15.8.2 节,“EXPLAIN 语句”。仅选择
WHERE
子句中使用的那些列。一次从查询中删除一个表,直到它返回一些行。如果表很大,最好在查询中使用
LIMIT 10
。对应该与从查询中最后删除的表匹配的列发出
SELECT
。如果您将
FLOAT
或DOUBLE
列与具有小数的数字进行比较,则不能使用等式 (=
) 比较。此问题在大多数计算机语言中很常见,因为并非所有浮点数都能以完全精确的方式存储。在某些情况下,将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.6 节,“如何报告错误或问题” 中的说明提交错误报告。