簡體   English   中英

多個內連接語句結合子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM