我正在运行一个简单的查询:
select employeeId, address, salary
from salaryTable inner join addressTable
on salaryTable.employeeId=addressTable.employeeId
;
我得到以下错误:
ERROR 1052 (23000): Column 'employeeId' in field list is ambiguous
为了解决这个问题,我需要限定select子句中的列employeeId
,以指示它来自哪个表。
现在,对于内部联接,这种错误检查难道不是多余的吗?我的意思是,内部联接返回employeeId
s匹配的交集,那么为什么我需要在select子句中限定它呢?
检查并不是多余的。
尽管值在两个表中可能相同,但类型可能不同。例如,一个可以是varchar(10)
,另一个可以为varchar(100)
。最终长度应该是多少?SQL需要知道模板要使用哪个表。
当涉及不同的基础类型时,情况会更糟。可以在一个表中将字段存储为整数,在另一个表中存储为varchar(255)
。或者——恐怖的恐怖——作为float
。