2012-10-18 115 views
2

當運行下面的查詢,我結束了在phpMyAdmin一個MySQL錯誤:MySQL的#1054未知列

#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.0版本引入了一個語法變化,導致如果你忘記了某些括號此消息)

MySQL服務器運行版本Debian上的「5.1.63-0 + squeeze1」。

編輯:我改變了第一個查詢行

SELECT emp.ID AS user, wd.Datum

維傑的建議和查詢工作!雖然我不明白爲什麼。

+0

什麼是你列在表中? –

+1

嘗試在你的選擇中使用wd.Datum。 – Vijaychandar

+0

Post SHOW CREATE TABLE employees; SHOW CREATE TABLE工作日; – rkosegi

回答

3

您在查詢的HAVING子句中使用的每一列必須出現在所選列中。 HAVING作品的計算值(例如,如果您使用SUM()功能,您可以使用計算的總和HAVING子句。)

還要注意的是,如果你給一個列的別名,你必須使用別名在HAVING條款。

有關隱藏列和HAVING更多信息:http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

0

嘗試在您的選擇中使用wd.Datum。

它在sql中很常見,如果您在having子句中使用列,則必須在select中添加該列。會發生什麼,就像它將創建一個虛擬表,其中包含您選擇的列,並使用having子句中的條件進行過濾。

---如果真的回答了您的問題,請將其作爲答案。

+0

對不起,Lex給了更詳細的解釋,我不能選擇兩個答案:( – David

相關問題