2013-06-30 89 views
1

這個MySQL語句爲我提供了id_player = 30的所有id_duel_player,它工作正常。MySQL在更新語句中選擇

SELECT b.id_duel_player 
FROM duels a        
     INNER JOIN duel_player b   
      ON a.id_duel = b.id_duel 
WHERE id_player = 30 
UNION ALL 
SELECT c.id_duel_player 
FROM duel_player c 
     INNER JOIN 
     (
      SELECT aa.* 
      FROM duels aa 
        INNER JOIN duel_player bb 
         ON aa.id_duel = bb.id_duel 
      WHERE bb.id_player = 30 
     ) d ON c.id_duel = d.id_duel AND c.id_player <> 30 

我想爲UPDATE(從duel_player表中的字段)的MySQL聲明這一切id_duel_player返回該select語句。

UPDATE duel_player 
SET num = 2, 
    total = 5 
WHERE (duel_player.id_duel_player = id_duel_player's from above SELECT statement) 

我想要最有效和最快速的方式來做到這一點。

感謝

+0

您希望從SELECT中獲得多少行? – Joni

+0

@Joni通常小於100,但在某些情況下可能更多(200-400) – Jovan

回答

1

爲200-400行很可能最快創建臨時表的結果,然後執行UPDATE具有聯接:

CREATE TEMPORARY TABLE id_duel_players AS 
SELECT b.id_duel_player as id FROM duels a ... 

UPDATE duel_player 
JOIN id_duel_players ON duel_player.id_duel_player = id_duel_players.id 
SET num = 2, 
    total = 5 

對於較小的結果集你會發現IN運算符足夠快(... WHERE id_duel_player IN (SELECT ...)),但我發現它對於數百行結果集不可靠。 (不可靠=突然沒有找到匹配,不知道爲什麼,我沒有調查過。)