3

以下のクエリを実行すると、PHPMyAdmin で MYSQL エラーが発生します。

#1054 - 「having 句」の不明な列「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」を実行しています。

編集:最初のクエリ行をに変更しました

emp.ID をユーザー、wd.Datum として選択

Vijay が提案したように、クエリは機能します! 理由はわかりませんが。

4

2 に答える 2

4

クエリの句で使用するすべての列HAVINGは、選択した列に存在する必要があります。HAVING計算された値で機能します(たとえば、関数を使用する場合、節SUM()で計算された合計を使用できます)。HAVING

HAVINGまた、列にエイリアスを指定する場合は、句でエイリアスを使用する必要があることに注意してください。

非表示の列の詳細については、http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.htmlHAVINGを参照してください。

于 2012-10-18T12:37:03.157 に答える
0

選択で wd.Datum を使用してみてください。

SQL ではよくあることですが、having 句で列を使用している場合は、select でその列を追加する必要があります。何が起こるかは、選択した列で仮想テーブルを作成し、having 句の条件でフィルタリングするようなものです。

--- 本当にあなたの質問に答えた場合は、回答済みにしてください。

于 2012-10-18T10:00:01.957 に答える