MySql查询显示错误

时间:2014-08-11 11:37:31

标签: php mysql

我的查询在'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

3 个答案:

答案 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