我需要将字段 a 和 b UNIQUE 组合在一起。现在有一些重复的行。我打算做的是留下另一个字段c的最低非零值的行。
1) 查找重复项 2) 删除所有行,但字段 c的非零值最低的行除外。
性能也很重要,因为该表已经有相当多的记录......
我自己无法弄清楚,我已经很困惑了:/
我需要将字段 a 和 b UNIQUE 组合在一起。现在有一些重复的行。我打算做的是留下另一个字段c的最低非零值的行。
1) 查找重复项 2) 删除所有行,但字段 c的非零值最低的行除外。
性能也很重要,因为该表已经有相当多的记录......
我自己无法弄清楚,我已经很困惑了:/
http://sqlfiddle.com/#!2/a81e6/14/0
看看小提琴,您只需将 SELECT 更改为 DELETE,它就会删除它选择的两条记录(即具有较高 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 ;
尝试这个。可能对你有用。
您没有提供表的名称和列,这很容易提供正确的解决方案,但无论如何您可以使用以下命令
delete from highscores where id = (select * from (select id from highscores order by score desc limit 10,1) as t)
希望这会删除除最低值之外的所有行,但不能执行具有非零值或小于零值的行。它将保留最低值并删除所有其他值。您不能在单个命令中拥有橙子和苹果,您必须运行两个命令。首先用于删除小于 0 的值,然后是最低记录。