如何使用join,update和order by编写查询?

时间:2013-05-08 15:27:55

标签: mysql sql join sql-update sql-order-by

我有2个表:tblRider和tbl_SCORE。 tblRider拥有关于所有车手(竞争对手)的所有信息,并且在tbl_SCORE中保存了所有车手的得分。 我想在tblRider中更新一列HalfPipeFinal。标准此列设置为0,但我想将其设置为1,以获得20个最佳分数的车手。 (因此,只有20位最佳车手可以参加决赛,而那些参赛者在HalfPipeRider中排名为1)

这是我的疑问:

UPDATE tblRider
JOIN tbl_SCORE ON tblRider.riderID = tbl_SCORE.riderID
SET tblRider.HalfPipeFinal = 1
WHERE `gameID` =35
ORDER BY `score` DESC
limit 20;**

如果我运行此查询,则会收到此错误:“UPDATE和ORDER BY的使用不正确” 所以我去看了,显然你不能在加入中使用更新和订单。所以我正在寻找另一种方法来编写这个查询而没有订单,但我找不到它。

感谢所有帮助。 感谢

2 个答案:

答案 0 :(得分:12)

在SQL中,您不能将ORDER BY作为UPDATE本身的一部分。但是你可以使过滤器成为子查询,给它一个别名并加入它......

UPDATE tblRider r
JOIN 
(
    SELECT riderID 
    FROM tbl_SCORE
    WHERE gameID = 35
    ORDER BY score DESC
    LIMIT 20 
) s
ON r.riderID = s.riderID
SET r.HalfPipeFinal = 1;

答案 1 :(得分:3)

离开我的头顶而没有打开SQL会话来测试这个你可以尝试...

UPDATE tblRider  
SET HalfPipeFinal = 1 
WHERE riderID 
IN 
(
  SELECT s.riderID 
  FROM tbl_SCORE
  ORDER BY s.score 
  DESC limit 20
)

虽然IN (subselect)会有令人不快的性能损失。