2017-03-31 105 views
0

我有这个疑问暧昧的Mysql列

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 (*)所以我不明白为什么?

+1

只是做' t.employee_id ='6748372'' – bernie

+0

你有't.employee_id'和'et.employee_id',对你来说它们是相同的并且保持相同的信息,但是MySQL不会跳到结论,你必须指定哪一个。只要引用'employee_id'就会变得模糊不清。 – Havenard

回答

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别名

1

要从中选择表的产品包括两个同名的列,这里明显:

ON t.employee_id=et.employee_id 

两个timesheetsemployeetimesheets有列。由于JOIN子句将确保产品中的这两列始终具有相同的值,因此您指定的可能无关紧要。任何一个会做的工作:

WHERE t.employee_id='6748372' 

虽然你可能要运行在既有DESCRIBE,看看是否有在性能上有什么区别。

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 timeinyear='2017' 
AND timeinmonth='March' 
AND isWeekNumber='1'