我有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的使用不正确” 所以我去看了,显然你不能在加入中使用更新和订单。所以我正在寻找另一种方法来编写这个查询而没有订单,但我找不到它。
感谢所有帮助。 感谢
答案 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)
会有令人不快的性能损失。