在我的数据库中,有两种类型的图像:挑战和答案。它们都有 lat/lng 位置列。在此查询中,我希望选择用户最近通过 INNER JOIN 创建的挑战或答案。
(这背后的业务逻辑:我们基本上想要获得一个用户列表,其中包括用户的最后一个已知位置,该位置由他们最近的挑战或答案决定 - 以最近的为准。如果用户没有最后一个已知位置,它们不应包含在此列表中。)
我得到[Err] 1054 - Unknown column 'U.Id' in 'where clause'
:
SELECT
U.Id,
U.TotalPoints,
LastImage.Lat,
LastImage.Lng
FROM User U
INNER JOIN
(
SELECT Lat, Lng FROM
(
(SELECT Lat, Lng, CreatedOn FROM AnswerImage WHERE UserId = U.Id ORDER BY Id DESC LIMIT 1)
UNION ALL
(SELECT Lat, Lng, CreatedOn FROM ChallengeImage WHERE UserId = U.Id ORDER BY Id DESC LIMIT 1)
) LastImages ORDER BY CreatedOn DESC LIMIT 1
) LastImage
WHERE U.Type = 1 AND U.Status = 2
ORDER BY TotalPoints DESC;
我似乎无法从派生的“LastImages”表(或任何合适的术语)中引用用户表(别名 U)。
任何人都可以帮忙吗?我尝试了其他方法,但没有一个能满足我的所有要求:
- 仅当用户至少有1 个挑战或 1 个答案时才返回一行(因此是 UNION)
- 最新的(由 ChallengeImage.CreatedOn 和 AnswerImage.CreatedOn 确定)图像将用于连接
谢谢!