Mysql 如何编写带有join、update和orderby的查询?
我有两张表:tblRider和tbl_分数。tblRider拥有所有车手(竞争对手)的所有信息,tbl_分数中保存了所有车手的分数。 我想在tblRider中更新一个半决赛列。标准此列设置为0,但我想为20分最佳的车手设置为1。(因此,只有20名最好的车手才能参加决赛,而那些有1名最佳车手的车手才能参加决赛) 这是我的疑问: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
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名骑手。