多数のテーブルを使用する複雑なクエリーで行が返されない場合は、次の手順を使用して問題を判別してください。
EXPLAIN
を指定してクエリーをテストし、明らかな間違いが見つかるかどうかを確認します。 セクション13.8.2「EXPLAIN ステートメント」を参照してください。WHERE
句で使用されているカラムのみを選択します。行が返されるまで、クエリーから一度に 1 つずつテーブルを削除します。 テーブルが大きい場合、クエリーに
LIMIT 10
を使用するのは良い方法です。クエリーから最後に削除したテーブルに対して一致する行を持つカラムに
SELECT
を発行します。FLOAT
カラムまたはDOUBLE
カラムと 10 進数の数値を比較している場合、等式 (=
) 比較は使用できません。 すべての浮動小数点値が正確な精度で格納されるとはかぎらないため、この問題はほとんどのコンピュータ言語で一般的です。FLOAT
をDOUBLE
に変更すると解決することがあります。 セクションB.3.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
テストファイルをバグレポートに添付します (セクション1.6「質問またはバグをレポートする方法」の手順を参照してください)。