If you have a complicated query that has many tables and that doesn't return any rows, you should use the following procedure to find out what is wrong with your query:
Teste a consulta com EXPLAIN
e verifique
se você pode encontrar alguma coisa que está errada. See
Secção 5.2.1, “Sintaxe de EXPLAIN
(Obter informações sobre uma
SELECT
)”.
Selcione apenas aqueles campos que são usados na cláusula
WHERE
.
Remova uma tabela por vez da consulta até que ela retorne
alguns registros. Se as tabelas são grandes, é uma boa
idéia usar LIMIT 10
com a consulta.
Faça um SELECT
da coluna encontrou um
registro com a tabela que foi removido por última da
consulta.
Se você estiver comparando colunas FLOAT
ou DOUBLE
com números que tenham
decimais, você não pode usar '='
. Este
problema é comum na maioria das linguagens de computadores
porque valores de ponto-flutuante não são valores exatos.
Na maioria dos casos, alterar o FLOAT
por
DOUBLE
corrigirá isto. See
Secção A.5.7, “Problemas com Comparação de Ponto Flutuante”.
Se você ainda não pode imaginar o que está errado, crie
um teste mínimo que possa ser executado com mysql
test < query.sql
e possa mostrar seus
problemas. Você pode criar um arquivo de teste com
mysqldump --quick banco_de_dados tabela >
query.sql
. Abra o arquivo em um editor, remova
algumas linhas inseridas (se houver muitas) e adicione sua
instrução select no fim do arquivo.
Teste se você ainda está tendo problemas fazendo:
shell>mysqladmin create test2
shell>mysql test2 < query.sql
Envie o arquivo de teste usando mysqlbug
para lista de email gerais do MySQL. See
Secção 1.7.1.1, “As Listas de Discussão do MySQL”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.