WHERE 子句中的 MySQL 列 ALIAS

标签 mysql sql where-clause

在下面的查询中,我有两个表,search_resultlogin_details

SELECT fullname,
(SELECT MAX(login_time) FROM login_details WHERE reg_id=registration) as login_time 
FROM search_result WHERE hire_work=0;  

NOTE: reg_id is a column in login_details and registration is a column in search_result

通过执行上面的查询,我得到了 search_result 表中所有用户的全名和上次登录时间。

现在我的要求是获取从今天起过去 180 天内所有未登录的用户以及上次登录时间。当我添加 WHERE 条件时,例如 login_time > '2018-05-22 18:09:00',它显示错误 Unknown column login_time blah废话......

查询:

SELECT fullname,
(SELECT MAX(login_time) FROM login_details WHERE reg_id=registration) as login_time 
FROM search_result WHERE hire_work=0 AND login_time > '2018-05-22 18:09:00'; 

请帮助我找到确切的查询。答案将不胜感激。谢谢

最佳答案

您的查询不起作用,因为 WHERE 语句在 SELECT 语句之前执行。 你应该使用 HAVING statement过滤计算字段。例如:

SELECT fullname,
  (SELECT MAX(login_time)
   FROM login_details
   WHERE reg_id=registration) AS login_time
FROM search_result
WHERE hire_work=0
GROUP BY fullname
HAVING login_time < '2018-05-22 18:09:00'

此外,子查询也不是好的做法。您可以使用 JOIN 重写此查询

SELECT search_result.fullname,
       MAX(login_details.login_time) AS login_time
FROM search_result
JOIN login_details ON login_details.reg_id=search_result.registration
WHERE search_result.hire_work=0
GROUP BY fullname
HAVING login_time < '2018-05-22 18:09:00'

And.. 您可以使用以下表达式代替固定日期:NOW() - INTERVAL 180 DAY。例如:

SELECT search_result.fullname,
       MAX(login_details.login_time) AS login_time
FROM search_result
JOIN login_details ON login_details.reg_id=search_result.registration
WHERE search_result.hire_work=0
GROUP BY fullname
HAVING login_time < NOW() - INTERVAL 180 DAY

关于WHERE 子句中的 MySQL 列 ALIAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53432870/

相关文章:

MySQL 如果差异小于 0,则选择 0,否则选择差异

php - sql中的组计数产品ID

sql - 参数计数不匹配?但我相当肯定他们匹配

c# - 在单个语句中正确使用 Select() 和 Where()

MySQL-DBI : How to tell if the first column is an auto increment column?

mysql - 计算多个平均值中的最大值 - SQL

php - 在 mysql 中用 php targeting auto_increment 删除记录?

c# - 如何从 SQL Server 内存中清除 SqlDependency?

mysql - 如何在 codeigniter 的 mysql 查询中给出两个或 where 条件

tsql - 你写哪个SQL?