我的查询在'on clause'
中显示错误未知列'u.id'我的查询
SELECT u.id,u.username ,sum(s.score) AS User_Score
FROM
`user` AS u ,
`team_member` as tm
LEFT JOIN score s ON (s.user_id=u.id and s.game_id=49 and s.team_id=27)
where tm.user_id=u.id and tm.team_id=27
答案 0 :(得分:1)
您应该使用适当的INNER JOIN重写您的查询:
SELECT u.id,u.username ,sum(s.score) AS User_Score
FROM
`user` AS u
INNER JOIN
`team_member` as tm
tm.user_id=u.id
LEFT JOIN score s ON (s.user_id=u.id and s.game_id=49 and s.team_id=27)
where tm.team_id=27
GROUP BY u.id
这是一个优先事项,请参阅manual
以前,逗号运算符(,)和JOIN都有相同的含义 优先级,因此连接表达式t1,t2 JOIN t3被解释为 ((t1,t2)JOIN t3)。现在JOIN具有更高的优先级,所以表达式 被解释为(t1,(t2 JOIN t3))。此更改会影响语句 使用ON子句,因为该子句只能引用列 在连接的操作数中,优先级的变化会发生变化 解释这些操作数是什么。
因此,您不能在LEFT JOIN的连接条件中使用别名为u
的表。如果使用显式连接语法,那就没问题了。
要获得所需的结果,您应该使用GROUP BY u.id(MySQL允许优化省略GROUP BY列列表中的u.username)。
答案 1 :(得分:1)
您的join
不正确:
SELECT u.id,u.username ,sum(s.score) AS User_Score
FROM
`user` AS u join `team_member` as tm on tm.user_id=u.id
LEFT JOIN score s ON (s.user_id=u.id and s.game_id=49 and s.team_id=27)
where tm.team_id=27
group by u.id,u.username
如果使用join,则必须将其用于所有表,并且不能与where语句混合使用。
答案 2 :(得分:0)
不使用user AS u
,只需user u
SELECT u.id,u.username ,sum(s.score) AS User_Score
FROM
`user` u ,
`team_member` tm
LEFT JOIN score s ON (s.user_id = u.id and s.game_id = 49 and s.team_id = 27)
where tm.user_id=u.id and tm.team_id=27