2013-08-26 5 views
0

Я бегу простой запрос:Внутреннее объединение неоднозначное имя столбца проверки излишним?

select employeeId, address, salary 
from salaryTable inner join addressTable 
on salaryTable.employeeId=addressTable.employeeId 
; 

Я получаю следующее сообщение об ошибке:

ERROR 1052 (23000): Column 'employeeId' in field list is ambiguous 

Для того, чтобы решить эту проблему, мне нужно, чтобы квалифицировать столбец employeeId в выбранном пункте, чтобы указать, какие таблицы оно произошло от.

Теперь, не является ли эта ошибка проверки излишним для внутреннего соединения? Я имею в виду, что внутреннее соединение возвращает пересечение, где employeeId s соответствует, так почему мне нужно его квалифицировать в предложении select?

+0

Какую версию MySQL вы используете? Этот случай был [зафиксирован в MySQL 5.0.12] (http://bugs.mysql.com/bug.php?id=10646). –

+0

@BillKarwin: 5.1.58. Однако, пожалуйста, см. Принятый ответ. – abhinavkulkarni

ответ

3

Проверка не является излишним вообще.

Хотя значения могут быть одинаковыми в обеих таблицах типов может не быть. Например, может быть varchar(10), а другой varchar(100). Какова должна быть конечная длина? SQL должен знать, какую таблицу использовать для шаблона.

Ситуация еще хуже, когда задействованы различные базовые типы. Поле может храниться как целое число в одной таблице, а другое - varchar(255). Или - ужас ужасов - как float.

+0

Знаете ли вы, почему вы делаете 'select * из innerTableTable внутреннего адреса joinTable на зарплатуTable.employeeId = адресTable.employeeId ;' не выдает ошибку? – EmCo

+0

@ EmCo. , , Да. Когда есть повторяющиеся имена столбцов, MySQL, кажется, занимает только первое. –

Смежные вопросы