删除重复的行

时间:2012-06-28 18:01:04

标签: mysql duplicates rows

我需要组合字段a& b独特。现在有一些重复的行。我打算做的是将该行留给另一个字段c的最低非零值

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

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

我无法自己解决这个问题而且我已经很困惑了:/

3 个答案:

答案 0 :(得分: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 ;

试试这个。可能适合你。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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