フィールド a と b UNIQUE の組み合わせを作成する必要があります。現在、いくつかの重複行があります。私がやろうとしているのは、別のフィールド c のゼロ以外の最小値を持つ行を残すことです。
1) 重複を見つける 2)フィールド cのゼロ以外の最小値を持つ行を除くすべての行を削除します。
テーブルにはすでにかなりの数のレコードがあるため、パフォーマンスも重要です...
私は自分でそれを理解することができず、すでにかなり混乱しています:/
フィールド a と b UNIQUE の組み合わせを作成する必要があります。現在、いくつかの重複行があります。私がやろうとしているのは、別のフィールド c のゼロ以外の最小値を持つ行を残すことです。
1) 重複を見つける 2)フィールド cのゼロ以外の最小値を持つ行を除くすべての行を削除します。
テーブルにはすでにかなりの数のレコードがあるため、パフォーマンスも重要です...
私は自分でそれを理解することができず、すでにかなり混乱しています:/
個別のレコードを格納できる一時テーブルを作成してから、元のテーブルを切り捨てて、一時テーブルからデータを挿入できます。
CREATE TEMPORARY TABLE temp_table (a INT,b INT,c INT)
INSERT INTO temp_table (a,b,c) SELECT * FROM table1 where c in (select min(c) from table1 group by a,b);
TRUNCATE table1;
INSERT INTO table1 (a,b,c) SELECT * FROM temp_table ;
これを試して。それはあなたのために働くかもしれません。
http://sqlfiddle.com/#!2/a81e6/14/0
フィドルを見てください。SELECT を DELETE に変更するだけで、選択した 2 つのレコードが削除されます (つまり、より高い C 列を持つ 2 つの重複)。
テーブルの名前と列を指定していない場合、正しい解決策を提供するのは簡単ですが、とにかく次のようにコマンドを使用できます
delete from highscores where id = (select * from (select id from highscores order by score desc limit 10,1) as t)
これにより、最小値を除くすべての行が削除されますが、ゼロ以外の値またはゼロ未満の値を持つ行は削除できません。最小値を保持し、他のすべてを削除します。1つのコマンドにオレンジとリンゴを含めることはできません。2つのコマンドを実行する必要があります。最初に0未満の値を削除し、次に最も低いレコードを削除します。