【问题标题】:MySQL #1054 unknown columnMySQL #1054 未知列
【发布时间】:2012-10-08 17:58:33
【问题描述】:

运行下面的查询时,我在 PHPMyAdmin 中遇到了一个 MYSQL 错误:

#1054 - “有子句”中的未知列“wd.Datum”

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

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”。

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

选择 emp.ID 作为用户,wd.Datum

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

【问题讨论】:

  • 你的表格中有哪些列?
  • 尝试在您的选择中使用 wd.Datum。
  • 发布 SHOW CREATE TABLE 员工; SHOW CREATE TABLE 工作日;

标签: mysql phpmyadmin mysql-error-1054


【解决方案1】:

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

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

--- 如果它确实回答了您的问题,则将其设为已回答。

【讨论】:

  • 抱歉,Lex 给出了更详细的解释,我无法选择两个答案:(
【解决方案2】:

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

另请注意,如果您为列指定别名,则必须在 HAVING 子句中使用别名。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 2012-03-09
    • 1970-01-01
    • 2016-11-13
    • 2012-10-14
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    相关资源
    最近更新 更多