解决没有匹配行的问题
如果您有使用许多表但不返回任何行的复杂查询,则应使用以下过程找出错误所在:
- 使用
EXPLAIN
来测试查询,以检查是否可以找到明显错误的内容。请参见“ EXPLAIN语句”。 - 仅选择该
WHERE
子句中使用的那些列。 - 从查询中一次删除一个表,直到返回一些行。如果表很大,则最好
LIMIT 10
与查询一起使用。 SELECT
为应该与上次从查询中删除的表相匹配的行的列发出。- 如果您正在比较
FLOAT
或DOUBLE
具有十进制数字的列,则不能使用等式(=
)比较。在大多数计算机语言中,此问题很常见,因为并非所有浮点值都可以精确地存储。在某些情况下,将更FLOAT
改为DOUBLE
可解决此问题。请参见第B.4.4.8节“浮点值问题”。 如果您仍然无法找出问题所在,请创建一个可以测试此
mysql test < query.sql
问题的最小测试。您可以通过使用mysqldump --quick db_nametbl_name_1
...tbl_name_n
> query.sql转储表来创建测试文件。在编辑器中打开文件,删除一些插入行(如果有多余的行来证明问题),然后SELECT
在文件末尾添加语句。通过执行以下命令,验证测试文件是否演示了该问题:
shell>
mysqladmin create test2 shell>mysql test2 < query.sql将测试文件附加到错误报告,可以使用“如何报告错误或问题”中的说明进行归档。