【发布时间】:2014-07-23 10:08:14
【问题描述】:
在我的数据库中,有两种类型的图像:挑战和答案。它们都有 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 确定)图像将用于连接
谢谢!
【问题讨论】:
标签: mysql sql nested-queries derived-table