2012-06-28 4 views
1

Мне нужно сделать комбинацию полей & b УНИКАЛЬНЫЙ. Сейчас есть несколько повторяющихся строк. То, что я намереваюсь сделать, - оставить строку с самым низким ненулевым значением другого поля c.Удалить повторяющиеся строки с помощью

1) найти дубликаты 2) удалить все строки, кроме тех, которые имеют самое низкое ненулевое значение поля c.

Производительность также имеет важное значение, потому что таблица имеет довольно некоторые записи уже ...

Я не могу понять это самостоятельно и я очень запутался уже:/

ответ

1

Вы можете создать временную таблицу, в которой вы можете хранить отдельные записи, а затем обрезать исходную таблицу и вставлять данные из таблицы temp.

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

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

Посмотри на скрипке, вы бы просто изменить ВЫБРАТЬ УДАЛИТЬ, и было бы удалить две запись отобранной (то есть два дубликата с более высокой колонкой C).

0

Вы не дали имена и столбцы таблиц было бы легко обеспечить правильное решение, но в любом случае вы можете использовать команду следующего

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

Надеется, что это удалить все строки, за исключением самого низкого значения но не может делать то, что имеет ненулевые значения или меньше нуля. Он сохранит самое низкое значение и удалит все остальные. Вы не можете иметь апельсины и яблоки в единственной команде, вам нужно запустить две команды. Сначала для удаления значений менее 0, а затем самая низкая запись.

Смежные вопросы