2013-05-08 65 views
6

我有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

你不能運行這個查詢沒有「按順序」.. ?? ?? msg顯示的錯誤是什麼? – 2013-05-08 15:31:26

回答

11

在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; 
+0

非常感謝! – user2362951 2013-05-08 17:39:36

+0

@ user2362951你可以標記爲答案。或者,如果沒有,我希望這一天有一些票增加... thanx :) – davmos 2013-05-08 19:01:52

+0

這隻適用於如果WHERE條件只涉及第二個表:( – matteo 2017-12-19 16:39:26

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)可能會有不愉快的表現處罰。

相關問題