[英]Multiple inner-join statements combined with subquery
以下查詢顯示了我需要的表 pointsList 的結果(按 idMatch 列分組的每個用戶的最新記錄)
select * from pointsList p
inner join ( select idMatch, max(datePointsCalculated ) as MaxDate from pointsList group by idMatch ) tm
on p.idMatch = tm.idMatch and p.datePointsCalculated = tm.MaxDate
order by p.idMatch ASC
但現在我還想 select 一些關於用戶的附加信息(來自表用戶)。 我解決這個問題的天真方法是像這樣創建一個新的內部連接:
select * from pointsList p, users u
inner join users
on u.idUser = p.idUser
inner join ( select idMatch, max(datePointsCalculated ) as MaxDate from pointsList group by idMatch ) tm
on p.idMatch = tm.idMatch and p.datePointsCalculated = tm.MaxDate
order by p.idMatch ASC
但我收到錯誤消息“on 子句中的未知列'p.idUser'”。 我嘗試使用 users.idUser 和 pointsList.idUser 以及其他組合(在 on-clouse 中重命名 pointsList),但我總是得到未知列錯誤(pointsList.idUser 確實存在)。 任何人都可以解釋我做錯了什么? 我也想將此查詢擴展到另一個表。
先感謝您!
逗號,
FROM 子句中的優先級低於 JOIN 優先級。 您的查詢充當:
select * from pointsList p,
(
users u
inner join users
on u.idUser = p.idUser
inner join ( select idMatch, max(datePointsCalculated ) as MaxDate from pointsList group by idMatch ) tm
on p.idMatch = tm.idMatch and p.datePointsCalculated = tm.MaxDate
)
order by p.idMatch ASC
當然,在括號內無法訪問表pointsList AS p
。
使用 CROSS JOIN 代替逗號:
select * from pointsList p
CROSS JOIN users u
inner join users
on u.idUser = p.idUser
inner join ( select idMatch, max(datePointsCalculated ) as MaxDate from pointsList group by idMatch ) tm
on p.idMatch = tm.idMatch and p.datePointsCalculated = tm.MaxDate
order by p.idMatch ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.