MySQL: "Столбец column_name", где предложение неоднозначно
Я присоединяюсь 2 таблицы
например
TABLE_A + --------- + ----------- + ----------- + | user_id | ticket_id | имя_пользователя | + --------- + ----------- + ----------- + TABLE_B + ----------- + ------------- + | ticket_id | тикет имя | + ----------- + ------------- +
Если я запускаю следующий запрос:
ВЫБРАТЬ table_A.user_id, table_A.user_name, table_B.ticket_name ИЗ таблицы_А LEFT JOIN table_B ON table_B.ticket_id = table_A.ticket_id ГДЕ ticket_id = '1';
На живом сервере мы получаем ошибку: " Column 'ticket_id' in where clause is ambiguous
"
На тестовом сервере запрос принят.
Я знаю, как решить ошибку, это не проблема.
Однако я был бы очень рад, если бы наш тестовый сервер НЕ принял этот запрос и (как и рабочий сервер) выдал ошибку.
Кто-нибудь знает, есть ли какая-то настройка, которая заставит тестовый сервер выдавать ошибку, как живой сервер?
PS
Версия MySQL на тестовом сервере: 5.0.32-Debian_7etch5-log
Версия MySQL на Живом сервере: 5.0.41-community-log
3 ответа
Есть аналогичные проблемы с MS SQLServer, где версия 2000 принимает некоторые неоднозначные запросы, а 2005-й выдавал ошибку. В основном новые версии кажутся более строгими.
Как правило, вы должны использовать одну и ту же версию БД как на тестовом сервере, так и на производственном сервере, чтобы избежать такого поведения, когда фрагмент кода работает на тестовом компьютере и дает сбой в работе.
В каком режиме SQL работают ваши два сервера? Я мог бы представить, что одно настроено быть более строгим, чем другое.
Я думаю, что Томалак прав: в административных настройках MySQL существует строгий режим, который может решить вашу проблему.
Напоминаю, что вы выбираете его во время создания БД, но вы можете настроить его в интерфейсе администратора.
В MySQL сейчас есть несколько существенных ошибок, вы можете рассмотреть возможность перехода на SQL Server Express, если можете...
У Sun финансовые проблемы, и я не уверен, как MySQL окажется в итоге.