18.17 Résoudre les problèmes sans lignes correspondantes

Si vous avez des requêtes longues et compliquées, avec de nombreuses tables, et qui ne renvoie aucune ligne, vous pouvez utiliser la méthode suivante pour trouver l'erreur dans votre requête :

  1. Lancez la requête avec EXPLAIN est assurez vous que tout est bon. Reportez vous à la section EXPLAIN.
  2. Sélectionnez seulement les champs qui sont utilisé dans la clause WHERE.
  3. Supprimez une table par une table, dans la requête, jusqu'à ce qu'elle vous retourne enfin des lignes. Si les tables sont grandes, c'est une bonne idée d'utiliser la clause LIMIT 10.
  4. Effectuer un SELECT dans la colonne qui devrait retourner des lignes, et comparez la avec la dernière table qui a été supprimé de la requête.
  5. Si vous faites des comparaisons entre des FLOAT ou DOUBLE et des nombres à virgules, vous ne pourrez pas utiliser l'opérateur =! Ce problème est commun à la plus part des langages informatiques, car la représentation en virgule flottante n'est pas une valeur exacte.
    mysql> SELECT * FROM table_name WHERE float_column=3.5;
       ->
    mysql> SELECT * FROM table_name WHERE float_column between 3.45 and 3.55;
    
    Dans la plus part des cas, changer le FLOAT en DOUBLE résoudra le problème !
  6. Si vous ne savez toujours pas ce qui est faux, créez un texte minimum, qui pourra être exécuté avec mysql test < query.sql. Vous pourrez créer un fichier de teste avec mysqldump --quick database tables > query.sql. Editez le fichier, supprimez quelques lignes (certaines sont en trop), et ajoutez votre commande à la in. Vérifier que vous avez toujours votre problème avec :
shell> mysqladmin create test2
shell> mysql test2 < query.sql

Envoyez votre test avec mysqlbug à mysql@lists.mysql.com.