SQL、値が最も低いものを削除することにより、合計行を制限する
-
27-10-2019 - |
質問
MySQLデータベースでハイスコアリストを作成しようとしています。ID、名前、スコアの3列のみです。テーブルはハイスコアと呼ばれます。このコードを使用してみました:
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行以上がある場合にのみ、最低値で行を削除するにはどうすればよいですか?最低値の1列以上の行がある可能性がありますが、1つだけ削除する必要があります。
解決
delete from highscores where id = (select * from (
select id from highscores order by score desc limit 10,1) as t)
最大のスコアのみを維持する別のアプローチ
delete from highscores where id in (select * from (
select id from highscores order by score desc limit 10,18446744073709551615) as t)
他のヒント
高いスコアでビューを作成できるのだろうか。
一時テーブルを作成してみて、選択した通話でそれを使用してください。
ストアドプロシージャを使用します。
これは一度だけ実行されます
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
所属していません StackOverflow