MySQL HELP 聚合可能不会出现在 WHERE 子句中

标签 mysql sql

我需要帮助才能使我的代码正常工作 该错误表示:“聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且聚合的列是外部引用。”

这是我的代码:

--Query 3
SELECT m.*,b.BikeStopID, r.DateTimeStart, r.DateTimeEnd
FROM Member m INNER JOIN Ride r ON m.MemberID = r.MemberID
INNER JOIN Bike b ON r.BikeID = b.BikeID
WHERE m.MemberID = 4 AND r.DateTimeEnd = (SELECT MAX(r.DateTimeEnd) FROM Ride)

最佳答案

在子查询中使用表别名:

WHERE m.MemberID = 4 AND
      r.DateTimeEnd = (SELECT MAX(r2.DateTimeEnd) FROM Ride r2)

查询中的表达式 r.DateTimeEnd 引用外部查询中的 r - 因此会出现错误。

如果您只想查找最新行,我更可能会写:

SELECT m.*, b.BikeStopID, r.DateTimeStart, r.DateTimeEnd
FROM Member m INNER JOIN
     Ride r
     ON m.MemberID = r.MemberID INNER JOIN
     Bike b
     ON r.BikeID = b.BikeID
WHERE m.MemberID = 4 
ORDER BY r.DateTimeEnd DESC
LIMIT 1;

如果最近的行程是针对其他成员(member),您的版本可能不会返回任何行。

关于MySQL HELP 聚合可能不会出现在 WHERE 子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242028/

相关文章:

'order by' 不确定时的 SQL 分页

sql - 带有窗口函数的 CASE 语句

mysql - LEFT 联合聚合中的 SQL 计数?

sql - PostgreSQL CTE UPDATE-FROM 查询跳过行

php - 是否可以仅使用一个 sql 来执行此操作?

mysql - Rails - 使用 SQL 查询获取回形针 URL

php - 存储图像的 View 数

mysql - 检查两个日期之间的日期或sql中的NULL

c++ - 我在 Mac 上的什么地方放置 MySQL C++ 连接器文件?

mysql - JDBI ALTER TABLE 删除分区