1

フィールド a と b UNIQUE の組み合わせを作成する必要があります。現在、いくつかの重複行があります。私がやろうとしているのは、別のフィールド c のゼロ以外の最小値を持つ行を残すことです。

1) 重複を見つける 2)フィールド cのゼロ以外の最小値を持つ行を除くすべての行を削除します。

テーブルにはすでにかなりの数のレコードがあるため、パフォーマンスも重要です...

私は自分でそれを理解することができず、すでにかなり混乱しています:/

4

3 に答える 3

1

個別のレコードを格納できる一時テーブルを作成してから、元のテーブルを切り捨てて、一時テーブルからデータを挿入できます。

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 ;

これを試して。それはあなたのために働くかもしれません。

于 2012-06-28T18:15:47.613 に答える
1

http://sqlfiddle.com/#!2/a81e6/14/0

フィドルを見てください。SELECT を DELETE に変更するだけで、選択した 2 つのレコードが削除されます (つまり、より高い C 列を持つ 2 つの重複)。

于 2012-06-28T18:20:55.730 に答える
0

テーブルの名前と列を指定していない場合、正しい解決策を提供するのは簡単ですが、とにかく次のようにコマンドを使用できます

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

これにより、最小値を除くすべての行が削除されますが、ゼロ以外の値またはゼロ未満の値を持つ行は削除できません。最小値を保持し、他のすべてを削除します。1つのコマンドにオレンジとリンゴを含めることはできません。2つのコマンドを実行する必要があります。最初に0未満の値を削除し、次に最も低いレコードを削除します。

于 2012-06-28T19:46:04.610 に答える