mysql - 从子查询中获取列

标签 mysql sql

我目前有以下(简化的)sql,它从主表table1中选择用户数据。此查询仅选择自给定日期以来未登录的用户。我使用子查询,因为登录表与主表是分开的。这两个表通过用户 ID 列关联。这非常有效。

// sql to get all records that haven't logged in since date above
$sql = "SELECT t1.*
FROM table1 t1
WHERE '2016-08-01' > (SELECT MAX(t2.DateCol)
                 FROM table2 t2
                 WHERE t2.userId= t1.userId)";

我的问题是,有没有办法返回 MAX(t2.DateCol) 的值? 我厌倦了这个,但没有重新认识该专栏

$sql = "SELECT t1.*, MAX(t2.DateCol) ....

仅供引用:此 sql 被解析为自定义 PDO 函数,因此无需警告 mysql 函数的不安全性。

最佳答案

快速解决方案(不知道您的技能或数据设置)- 将子查询移到范围内。

$sql = "SELECT t1.*,
(SELECT MAX(t2.DateCol)
                 FROM table2 t2
                 WHERE t2.userId= t1.userId) AS LastLogin
FROM table1 t1
HAVING '2016-08-01' > LastLogin ";

您将需要使用 HAVING 而不是 WHERE,因为您正在使用别名进行比较。如果您的查询由于其他因素而无法使用 HAVING,那么您需要重复子查询(不理想)。

关于mysql - 从子查询中获取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43541097/

相关文章:

java - 如何在项目中使用 2 个 RDBMS

sql - Oracle:检查 dml 语句

sql - SQL 中的 TRUNCATE 和 DELETE 有什么区别

c# - 如果某些数据为空,Winforms datagridview 将不会加载数据

选择项目的 php/mysql 最佳实践

mysql - 为什么这个左外连接会产生错误的结果?

php - 选择一些包含特定 INT 的 SQL 行

sql - 错误: Cannot use an aggregate or a subquery in an expression used for the group by list

php - select内连接,sql和php的group_concat

mysql - LIMIT 不适用于复杂查询