3

なぜこれが機能しないのですか?

SELECT `user_log`.`COMPUTER_NAME`, `user_log`.`LOCATION` 
FROM `user_log`, `user_log_max` as max
WHERE max.`USER_NAME` = `user_log`.`USER_NAME` AND max.`ACCESS_DATE_TIME` = `user_log`.`ACCESS_DATE_TIME`

次のエラーが発生します。

#1054 - Unknown column 'max.ACCESS_DATE_TIME' in 'where clause'

私はエイリアスを取り出してみました:

SELECT `user_log`.`COMPUTER_NAME`, `user_log`.`LOCATION` 
FROM `user_log`, `user_log_max`
WHERE `user_log_max`.`USER_NAME` = `user_log`.`USER_NAME` AND `user_log_max`.`ACCESS_DATE_TIME` = `user_log`.`ACCESS_DATE_TIME`

そしてこのエラー->

#1054 - Unknown column 'user_log_max.ACCESS_DATE_TIME' in 'where clause'

目盛りを外している…なんで?

編集:

user_log_max:
USER_NAME        varchar(20)      
ACCESS_DATE_TIME timestamp  

user_logには同じ列に加えて、COMPUTER_NAMEとLOCATIONを含むいくつかの列が含まれています

user_log_maxには、user_logでこのクエリを発行したすべてのデータが含まれています

SELECT `USER_NAME`, MAX(`ACCESS_DATE_TIME`) FROM `user_log
GROUP BY `USER_NAME`

基本的に、私がやろうとしているのは、GROUPBYにあるもの以外のMAX...GROUPBYを含む列を選択することです。

編集2:

これが私がuser_log_maxを作成する方法です->

 CREATE TABLE `user_log_max`
SELECT `USER_NAME`, MAX(`ACCESS_DATE_TIME`) FROM `user_log`
GROUP BY `USER_NAME`
4

2 に答える 2

1

クエリでは、集計列CREATE TABLEのエイリアスを指定する必要があります。MAX()

 CREATE TABLE `user_log_max`
   SELECT
     `USER_NAME`, 
      /* Alias this calculated value as ACCESS_DATE_TIME */
      MAX(`ACCESS_DATE_TIME`) AS `ACCESS_DATE_TIME` 
   FROM `user_log`
   GROUP BY `USER_NAME`

あなたがそれをしたように、列名は文字列全体のようなものでなければなりませんMAX(ACCESS_DATE_TIME)、それは明らかに非常に混乱しています。

これで、試行したとおりにクエリを実行できます。

/* The column ACCESS_DATE_TIME now exists in user_log_max, so this will work */
SELECT `user_log`.`COMPUTER_NAME`, `user_log`.`LOCATION` 
FROM `user_log`, `user_log_max`
WHERE `user_log_max`.`USER_NAME` = `user_log`.`USER_NAME` AND `user_log_max`.`ACCESS_DATE_TIME` = `user_log`.`ACCESS_DATE_TIME`
于 2012-09-28T16:31:34.640 に答える
0

where句をに変更しますon

SELECT `user_log`.`COMPUTER_NAME`, `user_log`.`LOCATION` 
FROM `user_log`, `user_log_max`
ON `user_log_max`.`USER_NAME` = `user_log`.`USER_NAME` AND `user_log_max`.`ACCESS_DATE_TIME` = `user_log`.`ACCESS_DATE_TIME`;
于 2017-05-13T13:52:07.827 に答える