【问题标题】:Ambiguous Mysql Column模棱两可的Mysql列
【发布时间】:2017-03-31 22:05:55
【问题描述】:

我有这个问题

SELECT t.employee_id, t.timeinhour,t.timeouthour, 
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(t.timeouthour, t.timeinhour)))) 
AS Duration FROM timesheets t 
INNER JOIN employeetimesheets et 
ON t.employee_id=et.employee_id
WHERE employee_id='6748372'
AND timeinyear='2017' 
AND timeinmonth='March' 
AND isWeekNumber='1'

它给了我这个错误

1052 - where 子句中的列“employee_id”不明确

我查看了herehere,但我没有使用all (*),所以我不明白为什么?

【问题讨论】:

  • 随便t.employee_id='6748372'
  • 您有t.employee_idet.employee_id,对您来说它们是相同的并且拥有相同的信息,但是MySQL 不会草率下结论,您必须指定哪一个。仅引用 employee_id 就会变得模棱两可。

标签: mysql ambiguous


【解决方案1】:

你需要在where部分定义表别名,像这样

SELECT t.employee_id, t.timeinhour,t.timeouthour,
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(t.timeouthour, t.timeinhour))))
AS Duration FROM timesheets t
INNER JOIN employeetimesheets et
ON t.employee_id=et.employee_id
WHERE t.employee_id='6748372'
AND t.timeinyear='2017'
AND t.timeinmonth='March'
AND t.isWeekNumber='1'

如果表中的列employeetimesheets 设置et 别名

【讨论】:

    【解决方案2】:

    您从中选择的表的产品包括两个同名的列,如下所示:

    ON t.employee_id=et.employee_id
    

    timesheetsemployeetimesheets 都有该列。由于JOIN 子句将确保产品中的这两列始终具有相同的值,因此您指定哪个可能并不重要。任何一个都可以完成这项工作:

    WHERE t.employee_id='6748372'
    

    尽管您可能想在两者上运行 DESCRIBE 并查看性能是否有任何差异。

    【讨论】:

      【解决方案3】:

      您必须指定要引用的表。试试这个,并注意更新的WHERE 行:

      SELECT t.employee_id, t.timeinhour,t.timeouthour, 
      SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(t.timeouthour, t.timeinhour)))) 
      AS Duration FROM timesheets t 
      INNER JOIN employeetimesheets et 
      ON t.employee_id=et.employee_id
      WHERE t.employee_id='6748372'
      AND timeinyear='2017' 
      AND timeinmonth='March' 
      AND isWeekNumber='1'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 2011-04-20
        • 2011-09-07
        相关资源
        最近更新 更多