9

我有 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”所以我去寻找,显然你不能在连接中使用 update 和 order by。因此,我正在寻找另一种方法来编写此查询,而其中没有 order by,但我找不到它。

感谢所有帮助。谢谢

4

2 回答 2

14

在 SQL 中,您不能将 aORDER 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;
于 2013-05-08T15:38:20.973 回答
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)可能会有令人不快的性能损失。

于 2013-05-08T15:41:11.563 回答