Si tiene una consulta complicada que utiliza muchas tablas pero que no retorna ningún registro, debería utilizar el siguiente procedimiento para encontrar qué está fallando:
Compruebe la consulta con EXPLAIN para ver si
encuentra algo que sea erróneo de una manera obvia. Consulte Sección 7.2.1, “Sintaxis de EXPLAIN (Obtener información acerca de un SELECT)”.
Seleccione únicamente aquellas columnas que están en la clausula WHERE.
Vaya quitando las tablas una a una de la consulta hasta que devuelva algunos
registros. Son las tablas son grandes, es una buena idea utilizar LIMIT 10 con la consulta.
Ejecute un SELECT sobre la columna que debería haber
extraido un registro de la tabla que fue eliminada en último lugar de la consulta.
Si está comparando columnas FLOAT o
DOUBLE con números que tengan decimales, no puede
utilizar comparaciones de igualdad (=). Este problema
es común en la mayor parte de los lenguajes informáticos debido a que no
todos los valores de coma flotante se pueden almacenar con precisión exacta.
En algunos casos, cambiar de FLOAT a DOUBLE
soluciona esto. Consulte Sección A.5.8, “Problemas con comparaciones en coma flotante”.
Si aún así no puede imaginar que es lo que funciona incorrectamente
cree un pequeña prueba que pueda ser ejecutada con mysql test <
query.sql y que muestre sus problemas. Muede crear un archivo de prueba
volcando las tablas con mysqldump
--quick db_name nombre_de_tabla_1 ...
nombre_de_tabla_n >
query.sql. Abra el archivo en un editor, elimine algunas líneas de inserción
(si hay más de las necesarias para demostrar el problema), y añada su sentencia
SELECT al final del archivo.
Verifique que el archivo de prueba demuestra el problema ejecutando los siguientes comandos:
shell> mysqladmin create test2 shell> mysql test2 < query.sql
Envíe el archivo de pruebas utilizando mysqlbug a la lista de correo general de MySQL. Consulte Sección 1.6.1.1, “Las listas de correo de MySQL”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.
