Отладка является более сложной задачей. Если один столбец отключен, это обычно довольно легко исправить. Но я предполагаю, что у вас есть более сложные задачи отладки, которые вам нужно выполнить.
Когда сбит с толку, я обычно начинаю отладку с предложением FROM
. Я прослеживаю все таблицы и подзапросы, которые составляют более крупный запрос, и проверяю, что соединения определены правильно.
Затем я проверяю свое предложение WHERE
. Я запускаю множество простых запросов к таблицам и к подзапросам, которые я уже проверил или которым я уже доверяю, и проверяю, что при выполнении более крупного запроса я получаю то, что ожидаю, с WHERE
условия на месте. Я дважды проверяю условия JOIN
одновременно.
Я дважды проверяю свои определения столбцов, чтобы убедиться, что я получаю то, что действительно хочу увидеть, особенно если используемые формулы являются сложными. Если у вас есть что-то сложное, например скоординированный подзапрос в определении столбца
Затем я проверяю, правильно ли я группирую данные, чтобы убедиться, что "DISTINCT
" и "UNION
" без UNION ALL
не удаляют необходимые дубликаты.
Я не думаю, что когда-либо сталкивался с запросом SQL, который не может быть разбит таким образом. Я не всегда такой методичный, как этот, но это хороший способ начать разрушать настоящий тупик.
Одна вещь, которую я мог бы порекомендовать, когда вы пишете свои запросы, это: Никогда не используйте SELECT *
в рабочем коде. Выбор всех столбцов таким способом - кошмар обслуживания, и это приводит к большим проблемам, когда ваша основная программа схемы меняются. Вы должны всегда записывать каждый столбец, если вы пишете код SQL, который вы будете поддерживать в будущем. Я сэкономил много времени и усилий, просто избавившись от "SELECT *
" в моих проектах.
Недостатком этого является то, что эти дополнительные столбцы не будут автоматически появляться в запросах, которые относятся к запросам "SELECT *
". Но вы все равно должны знать, как ваши запросы связаны друг с другом, и если вам нужны дополнительные столбцы, вы можете вернуться и добавить их.
Существует некоторая проблема, связанная с поддержанием репозитория кода, но если у вас есть программное обеспечение для управления версиями, оно будет более чем оправдано. Я слышал о способах управления версиями кода SQL, написанного в базах данных Access, но, к сожалению, я никогда не использовал их.