2

哪里有问题?选择工作正常.. 签入时 - 在“where 子句”中给出错误未知列“确认”

 SELECT 
    users_id, MD5(CONCAT(users_pass, users_email)) AS confirm
FROM
    (users_items) 
WHERE users_active = 0 
    AND confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7' 
LIMIT 1 
4

2 回答 2

9

因为确认是一个alias.

您不能在同一级别的 queryalias中使用inwhere子句。

你所要做的

where xxx
and MD5(CONCAT(users_pass, users_email)) = '39a5eccb97f63a2bb649ddd95c5a3ba7'

或者,如 Vatev 所述,您可以在HAVING子句中使用别名。但是使用HAVING子句可能会对性能产生影响。

原因 where 过滤您的查询(例如,尝试使用索引),并且 HAVING 子句正在过滤这些过滤后的数据。

where xxx
HAVING confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7'
于 2013-11-01T13:56:51.987 回答
1
SELECT 
    users_id,
    MD5(CONCAT(users_pass, users_email)) AS confirm
FROM
    (users_items) 
WHERE
    users_active = 0 
    AND MD5(CONCAT(users_pass, users_email)) = '39a5eccb97f63a2bb649ddd95c5a3ba7'
LIMIT 1

至于 HAVING 子句,AFAIK,它只与 GROUP BY 一起使用。

添加:

“一般来说,使用的子句必须完全按照语法描述中显示的顺序给出。例如,HAVING 子句必须在任何 GROUP BY 子句之后和任何 ORDER BY 子句之前。”

“不要对应该在 WHERE 子句中的项目使用 HAVING。例如,不要写以下内容:

SELECT col_name FROM tbl_name HAVING col_name > 0;

改为这样写:

SELECT col_name FROM tbl_name WHERE col_name > 0;"

这些是来自http://dev.mysql.com/doc/refman/5.0/en/select.html的引文。

于 2013-11-01T14:02:55.070 回答