Mysql 如何编写带有join、update和orderby的查询?

Mysql 如何编写带有join、update和orderby的查询?,mysql,sql,join,sql-update,sql-order-by,Mysql,Sql,Join,Sql Update,Sql Order By,我有两张表:tblRider和tbl_分数。tblRider拥有所有车手(竞争对手)的所有信息,tbl_分数中保存了所有车手的分数。 我想在tblRider中更新一个半决赛列。标准此列设置为0,但我想为20分最佳的车手设置为1。(因此,只有20名最好的车手才能参加决赛,而那些有1名最佳车手的车手才能参加决赛) 这是我的疑问: UPDATE tblRider JOIN tbl_SCORE ON tblRider.riderID = tbl_SCORE.riderID SET tblRider.Ha

我有两张表:tblRider和tbl_分数。tblRider拥有所有车手(竞争对手)的所有信息,tbl_分数中保存了所有车手的分数。 我想在tblRider中更新一个半决赛列。标准此列设置为0,但我想为20分最佳的车手设置为1。(因此,只有20名最好的车手才能参加决赛,而那些有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和orderby。因此,我正在寻找另一种方法来编写这个查询,但没有ORDERBY,但我找不到它

感谢所有的帮助。
谢谢在SQL中,您不能将
ORDER BY
作为
更新本身的一部分。但您可以将筛选器设为子查询,为其指定别名并加入它

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;

不需要打开SQL会话来测试,您可以尝试

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

尽管(subselect)中的
可能会造成令人不快的性能损失。

如果没有“order by”,您不能运行此查询吗??错误消息显示了什么?只有当WHERE条件只涉及第二个表时,这才有效:(是否指定了从子查询到外部更新的顺序将保持在哪个位置?@shmosel yes,在
ON
子句中。子查询
s
应该只返回第35场比赛中得分最高的20名骑手。