哪里有问题?选择工作正常.. 签入时 - 在“where 子句”中给出错误未知列“确认”
SELECT
users_id, MD5(CONCAT(users_pass, users_email)) AS confirm
FROM
(users_items)
WHERE users_active = 0
AND confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7'
LIMIT 1
因为确认是一个alias
.
您不能在同一级别的 queryalias
中使用inwhere
子句。
你所要做的
where xxx
and MD5(CONCAT(users_pass, users_email)) = '39a5eccb97f63a2bb649ddd95c5a3ba7'
或者,如 Vatev 所述,您可以在HAVING
子句中使用别名。但是使用HAVING
子句可能会对性能产生影响。
原因 where 过滤您的查询(例如,尝试使用索引),并且 HAVING 子句正在过滤这些过滤后的数据。
where xxx
HAVING confirm = '39a5eccb97f63a2bb649ddd95c5a3ba7'
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;"