mysql帮助聚合不能出现在where子句中

46scxncf  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(279)

我需要帮助使我的代码正常工作,错误是:“聚合可能不会出现在where子句中,除非它出现在having子句或select列表中包含的子查询中,并且被聚合的列是外部引用。”
这是我的密码:

--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)
e4yzc0pl

e4yzc0pl1#

在子查询中使用表别名:

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;

如果最近一次乘坐的是其他成员,则您的版本可能不会返回任何行。

相关问题