【问题标题】:Inner join ambiguous column name checking superfluous?内连接不明确的列名检查是多余的吗?
【发布时间】:2013-08-26 22:30:15
【问题描述】:

我正在运行一个简单的查询:

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 列以表明它来自哪个表。

现在,对于内部连接来说,这种错误检查不是多余的吗?我的意思是,内连接返回 employeeIds 匹配的交集,那为什么我需要在 select 子句中限定它呢?

【问题讨论】:

  • 您使用的是什么版本的 MySQL?这个案例是reported fixed in MySQL 5.0.12
  • @BillKarwin:5.1.58。但是,请参阅已接受的答案。

标签: mysql inner-join


【解决方案1】:

检查一点也不多余。

虽然两个表中的可能相同,但类型可能不一样。例如,一个可能是varchar(10),另一个可能是varchar(100)。最后的长度应该是多少? SQL 需要知道要为模板使用哪个表。

当涉及不同的基本类型时,情况会更糟。您可以将字段作为整数存储在一个表中,将varchar(255) 存储在另一个表中。或者——恐怖的恐怖——作为float

【讨论】:

  • 你知道为什么select * from salaryTable inner join addressTable on salaryTable.employeeId=addressTable.employeeId ; 不会抛出错误吗?
  • @EmCo 。 . .是的。当有重复的列名时,MySQL 似乎只取第一个。
猜你喜欢
  • 2013-11-21
  • 1970-01-01
  • 2021-08-18
  • 2021-10-03
  • 2014-02-08
  • 1970-01-01
  • 2022-01-06
  • 2012-10-04
  • 2014-05-29
相关资源
最近更新 更多