B.3.4.7 Решение проблем с отсутствием соответствий строк
Если у вас есть сложное запросы, использующие много таблиц, но не возвращающее ни одной строки, используйте следующую процедуру для выявления проблемы:
Проверьте запрос с помощью
EXPLAIN, чтобы найти очевидные ошибки. См. Раздел 15.8.2, «Запрос EXPLAIN».Выберите только те столбцы, которые используются в
WHEREусловии.Постепенно удаляйте из запроса по одной таблице за раз, пока он не начнет возвращать строки. Если таблицы большие, рекомендуется использовать
LIMIT 10с запросом.Выполните
SELECTдля столбца, который должен был сопоставить строку с последней удалённой из запроса таблицей.Если вы сравниваете столбцы
FLOATилиDOUBLEс числами, содержащими десятичные дроби, вы не можете использовать сравнения на равенство (=). Эта проблема распространена во многих языках программирования, потому что не все значения с плавающей точкой могут быть сохранены с точной точностью. В некоторых случаях изменение типаFLOATнаDOUBLEрешает эту проблему. См. Раздел B.3.4.8, «Проблемы с числами с плавающей точкой».-
Если вы всё ещё не можете определить причину, создайте минимальный тестовый запрос, который можно выполнить с помощью
mysql test < query.sql, чтобы продемонстрировать проблему. Вы можете создать тестовый файл, экспортировав таблицы с помощью mysqldump --quick db_nametbl_name_1...tbl_name_n> query.sql. Откройте файл в редакторе, удалите некоторые строки INSERT (если их больше, чем необходимо для демонстрации проблемы) и добавьте вашеSELECTутверждение в конец файла.Убедитесь, что тестовый файл демонстрирует проблему, выполнив эти команды:
$>
mysqladmin create test2$>mysql test2 < query.sqlПрикрепите тестовый файл к отчету об ошибке, который можно подать, следуя инструкциям в Разделе 1.6, «Как сообщать об ошибках или проблемах».
© 2025 Oracle
Licensed under the GPLv2 License.