MySQL.RU .:. Одобрено лучшими российскими программистами
Справочное руководство по MySQLA.5.6 Решение проблем с отсутствием строк, удовлетворяющих условиям поиска
A.5.6 Решение проблем с отсутствием строк, удовлетворяющих условиям поиска
Если сложный запрос на множестве таблиц совсем не возвращает строк, то для
выяснения причин его неуспешного выполнения необходимо выполнить следующую
последовательность действий:
-
Проверьте запрос с помощью
EXPLAIN и посмотрите, не присутствуют ли в
нем явно неправильные записи (see section 5.2.1 Синтаксис оператора EXPLAIN (получение информации о SELECT )).
-
Выберите только поля, используемые в выражении
WHERE .
-
По одной убирайте из запроса таблицы до тех пор, пока не станут
возвращаться какие-нибудь строки. Если таблицы большие, то в запросе имеет
смысл использовать
LIMIT 10 .
-
Выполните
SELECT для столбца, который должен был дать совпадение строки
с последней исключенной из запроса таблицей.
-
Если столбцы типа
FLOAT или DOUBLE сравниваются с имеющими дробную
часть числами, то нельзя использовать `='. Это распространенная проблема в
большинстве компьютерных языков, поскольку значения с плавающей запятой не
являются точными. В большинстве случаев проблему решает изменение FLOAT на
DOUBLE . See section 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.
|