Если сложный запрос на множестве таблиц совсем не возвращает строк, то для выяснения причин его неуспешного выполнения необходимо выполнить следующую последовательность действий:
Проверьте запрос с помощью
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 test2shell>mysql test2 < query.sql
Используя mysqlbug,
пошлите тестовый файл в список
рассылки на <mysql@lists.mysql.com>.
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.
© 1995-2005 MySQL AB. All rights reserved.
