:: DEVELOPER ZONE
Если сложный запрос на множестве таблиц совсем не возвращает строк, то для выяснения причин его неуспешного выполнения необходимо выполнить следующую последовательность действий:
Проверьте запрос с помощью EXPLAIN
и посмотрите, не присутствуют ли в
нем явно неправильные записи (see Раздел 5.2.1, «Синтаксис оператора EXPLAIN
(получение информации о SELECT
)»).
Выберите только поля, используемые в выражении WHERE
.
По одной убирайте из запроса таблицы до тех пор, пока не станут
возвращаться какие-нибудь строки. Если таблицы большие, то в запросе имеет
смысл использовать LIMIT 10
.
Выполните SELECT
для столбца, который должен был дать совпадение строки
с последней исключенной из запроса таблицей.
Если столбцы типа FLOAT
или DOUBLE
сравниваются с имеющими дробную
часть числами, то нельзя использовать '=
'. Это распространенная проблема в
большинстве компьютерных языков, поскольку значения с плавающей запятой не
являются точными. В большинстве случаев проблему решает изменение FLOAT
на
DOUBLE
. See Раздел A.5.7, «Проблемы со сравнением чисел с плавающей точкой».
Если так и не удалось выяснить, в чем загвоздка, то для демонстрации
возникших у вас проблем создайте минимальный тест, запускающийся при
помощи mysql test < query.sql
. Тестовый файл можно создать,
воспользовавшись mysqldump --quick database tables > query.sql
. Далее
откройте файл в редакторе, удалите некоторые команды вставки (если их
слишком много) и добавьте в конце файла свою команду выборки. Убедитесь,
что проблема по-прежнему проявляется, посредством:
shell> mysqladmin create test2 shell> mysql test2 < query.sql
Используя mysqlbug
, пошлите тестовый файл в список рассылки на <mysql@lists.mysql.com>
.
© 1995-2005 MySQL AB. All rights reserved.