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.