2012-01-12 94 views
0

我試圖在MySQL數據庫中創建一個高分列表,只有3列:id,名稱和分數。該表被稱爲高分。我嘗試使用此代碼:SQL,通過刪除最低值的行來限制總行數

DELETE FROM Highscores WHERE 
Score = (SELECT min(Score) FROM Highscores) 
AND (SELECT count(*) FROM Highscores) > 10; 

但它給這個錯誤:

#1093 - You can't specify target table 'Highscores' for update in FROM clause 

如何刪除該行與最低值,只有當有超過10行?可能有不止一行的最低值,但我只希望刪除一行。

回答

0
delete from highscores where id = (select * from (
select id from highscores order by score desc limit 10,1) as t) 

另一種方法只保留10分最大

delete from highscores where id in (select * from (
select id from highscores order by score desc limit 10,18446744073709551615) as t) 
+0

當我嘗試去做這些事情時,它會給出錯誤「The table」高分「不存在」。 – stickyShift 2012-01-13 03:30:56

+0

這是因爲你只需要大寫高分。不要複製和粘貼。先閱讀 – 2013-10-06 05:52:44

0

使用存儲過程:

本只運行一次

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `Sanitize_Highscores`$$ 
CREATE PROCEDURE `Sanitize_Highscores`() READS SQL DATA 
BEGIN 
    DECLARE numrows int DEFAULT 0; 
    SELECT COUNT(*) INTO numrows FROM Highscores; 
    if numrows>10 THEN 
    DELETE FROM Highscores ORDER BY Score LIMIT 1; 
    END IF; 
END$$ 

DELIMITER ; 

,這取代了您的查詢

CALL Sanitize_Highscores 
+0

這隻會刪除一個,不檢查是否有表中的超過10個值仍。 – Tim 2012-01-12 22:33:42

+0

這並沒有解決只有超過10行的問題。 – Matthew 2012-01-12 22:34:03

+0

我正在研究它,當我意識到我已經保存了一個太短的版本(你看到了) - 抱歉,剪切和粘貼錯誤。 – 2012-01-12 22:41:51

1

我想知道如果你能創造高分的視圖。

0

嘗試創建一個臨時表並在SELECT調用中使用它。