[MySQL] сократить одинаковые строки
Я бы сделал select distinct во временную таблицу, прибил старую таблицу и переименовал временную.
я ничем не рискую во время этих операций?
Максимум - рабочим местом
не знаю.
Оптимально - это наиболее быстро?
как можно меньше что-то испортить?
что-то еще?
наиболее быстро при условии отсутствия риска потерять что-либо
1. добавляешь поле ID к таблице
2. Select bla-bla, min(id) .. group by bla-bla, id во вспомогательную таблицу tmp
3. delete .. where id not in (select * From tmp)
4. убиваешь id-поле
если есть связи на первую таблицу, то делаешь
2.5 update ... set id= select id from tmp where bla-bla = tmp.bla-bla
это медленнее, чем вышеприведенный вариант, но работает лучше, если есть какие-нибудь связи. тригеры или констрейнты.
delete from <table>t t where t.rowid<>
(select max(rowid) from <table> where <условие на идентичность данных>)
сделай лучше вначале селект * - проверь чтоб записей было N-1
delete from test t where (t.rowid<>
(select max(rowid) from test where id=1 and id=1
Мое решение: создать новую таблицу с такой же сигнатурой, потом создать в ней unique ключ над нужными полями, потом сказать insert ignore t2 select * from t1; Всё.
это как?
И таких действительно большинство, по крайней мере на массовых хостингах
веселее, когда пруд пруди баз и надо слить в одну без повторов - вот это песня на объемах свыше полумиллиона записей!
надо слить в одну без повторовЕще раз для глухих - insert ignore.
Оставить комментарий
vlfdimir58
Вопрос такой: есть таблица, в ней могут быть идентичные строки (в частности, пара одинаковых). ключевых полей нет.как преобразовать такую таблицу наиболее оптимально, убрав все, кроме одной, одинаковые строки?