SQL、値が最も低いものを削除することにより、合計行を制限する

StackOverflow https://stackoverflow.com/questions/8843311

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top