1

我需要将字段 a 和 b UNIQUE 组合在一起。现在有一些重复的行。我打算做的是留下另一个字段c的最低非零值的行。

1) 查找重复项 2) 删除所有行,但字段 c的非零值最低的行除外。

性能也很重要,因为该表已经有相当多的记录......

我自己无法弄清楚,我已经很困惑了:/

4

3 回答 3

1

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

看看小提琴,您只需将 SELECT 更改为 DELETE,它就会删除它选择的两条记录(即具有较高 C 列的两个重复项)。

于 2012-06-28T18:20:55.730 回答
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 回答
0

您没有提供表的名称和列,这很容易提供正确的解决方案,但无论如何您可以使用以下命令

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

希望这会删除除最低值之外的所有行,但不能执行具有非零值或小于零值的行。它将保留最低值并删除所有其他值。您不能在单个命令中拥有橙子和苹果,您必须运行两个命令。首先用于删除小于 0 的值,然后是最低记录。

于 2012-06-28T19:46:04.610 回答