2012-09-28 44 views
3

为什么不能正常工作?#1054 - 'where子句'中的未知列'max.ACCESS_DATE_TIME'

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` 

基本上所有的数据我想要做的是选择具有MAX ... GROUP BY的列,而不是GROUP BY中的列。

编辑2:

下面是我如何创建user_log_max - >

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

请描述你的架构。 – RedFilter

+0

你确定table'user_log_max'包含'ACCESS_DATE_TIME'吗? –

+0

不要担心错误消息中未显示反引号。我们需要看到表格结构。 –

回答

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` 
+0

你是对的......这看起来很有效!谢谢。 – hacket

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`; 
相关问题