MySQL#1054未知专栏

时间:2012-10-18 09:55:30

标签: mysql phpmyadmin mysql-error-1054

当运行下面的查询时,我最终在PHPMyAdmin中出现MYSQL错误:

#1054 - Unknown column 'wd.Datum' in 'having clause'

此查询属于时间报告应用程序,其中用户每天报告项目工作的时间。有一个表是预计工作日的天数,一张所有员工的表格以及一张包含当前工作率信息的表格。最后一个表也用于确定用户何时被雇用。 我们的想法是让所有工作日和所有用户(在稍后的查询中)选择用户忘记报告时间的日期。我想将结果集限制为用户使用的天数。 这是我的疑问:

SELECT emp.ID AS user
FROM (workdays wd, employees emp)
     INNER JOIN workrates wr ON (emp.ID=wr.UserId)
WHERE (wd.Datum<'2012-11-15')
GROUP BY WEEK(wd.Datum, 3), user
HAVING wd.Datum>=MIN(wr.FromDate)

(可能与http://bugs.mysql.com/bug.php?id=13551有关,这与MySQL版本5中引入的语法更改有关,如果您忘记了某些括号,则会导致此消息)

MySQL服务器在Debian上运行版本“5.1.63-0 + squeeze1”。

编辑:我将第一个查询行更改为

SELECT emp.ID AS user, wd.Datum

按照Vijay的建议,查询有效!虽然我不明白为什么。

2 个答案:

答案 0 :(得分:3)

您在查询的HAVING子句中使用的每一列都必须出现在所选列中。 HAVING适用于计算值(例如,如果使用SUM()函数,则可以使用HAVING子句中的计算总和。)

另请注意,如果您为列添加别名,则必须使用HAVING子句中的别名。

有关隐藏列和HAVINGhttp://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

的详细信息

答案 1 :(得分:0)

尝试在你的选择中使用wd.Datum。

它在sql中很常见,如果你在having子句中使用了一个列,你必须在select中添加该列。会发生什么,就像它会创建一个包含您选择的列的虚拟表,并使用having子句中的条件进行过滤。

---如果它真的回答了你的问题,请回答。