If you have a complicated query that uses many tables but that returns no rows, you should use the following procedure to find out what is wrong:
Test the query with
EXPLAINto check whether you can find something that is obviously wrong. See Section 15.8.2, “EXPLAIN Statement”.Select only those columns that are used in the
WHEREclause.Remove one table at a time from the query until it returns some rows. If the tables are large, it is a good idea to use
LIMIT 10with the query.Issue a
SELECTfor the column that should have matched a row against the table that was last removed from the query.If you are comparing
FLOATorDOUBLEcolumns with numbers that have decimals, you cannot use equality (=) comparisons. This problem is common in most computer languages because not all floating-point values can be stored with exact precision. In some cases, changing theFLOATto aDOUBLEfixes this. See Section B.3.4.8, “Problems with Floating-Point Values”.If you still cannot figure out what is wrong, create a minimal test that can be run with
mysql test < query.sqlthat shows your problems. You can create a test file by dumping the tables with mysqldump --quick db_nametbl_name_1...tbl_name_n> query.sql. Open the file in an editor, remove some insert lines (if there are more than needed to demonstrate the problem), and add yourSELECTstatement at the end of the file.Verify that the test file demonstrates the problem by executing these commands:
$> mysqladmin create test2 $> mysql test2 < query.sqlAttach the test file to a bug report, which you can file using the instructions in Section 1.5, “How to Report Bugs or Problems”.