Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удалить все дубликаты записей


Behemoth ©   (2003-01-24 14:28:00) 

В таблице Calls одно автоинкрементное поле ID и два десятка других (Field1..Field20). Узнать что это дубликат записи можно только по совокупности всех 20 полей. Так вот надобно убить дубликаты.
SELECT DISTINCT Field1,..,Field20 FROM Calls показывает все уникальные, а надо изничтожить остальные


Anatoly Podgoretsky   (2003-01-24 15:42:00) [1]

В этом случае надо заботиться еще раньше


roottim   (2003-01-24 15:29:00) [2]

извените... незаметил ID
к слову:
вопрос о проверке при вставке корректен, когда вставка выполняется скажем в ручную, а ежели загружать пачками, тот тут еще вопрос...


Behemoth   (2003-01-24 15:06:00) [3]

to neXT: да....похоже это правильнее.
Спасибо всем!!


neXt   (2003-01-24 15:01:00) [4]

Нужно, тогда проверять на уникальность при добавлении, а не отлавливать повторы после.


Behemoth   (2003-01-24 14:57:00) [5]

to roottim^: а записей тама именно стоко (в месяц добавляется по 700 000), а хранить их надо где-то год....Это долговато...


neXt   (2003-01-24 14:55:00) [6]

>>roottim
>> уникального id и в помине нет,
Может и есть, Behemoth говорит, что дублироваться могут записи по всем другим полям, кроме ID. Так что ...select distinct * from...не подойдёт, нужно перечислять все поля, кроме ID.


roottim   (2003-01-24 14:48:00) [7]

примерная реализация всего сказанного ( я так понимаю никакого уникального id и в помине нет, т.к строки полностью идентичны)

create table temp_table as select distinct * from my_table;
delete table my_table;
insert into my_table select * from temp_table;
drop table temp_table;

если в my_table записей до едрени фени кое-где надо усложнить запрос.. но принцип то-тже...


Reindeer Moss Eater   (2003-01-24 14:43:00) [8]

delete from table where id not in (select max(id) from table group by f1,......f20)


neXt   (2003-01-24 14:43:00) [9]

Можно, используя запрос

SELECT DISTINCT Field1,..,Field20 FROM Calls

сложить всё в отдельную таблицу (временную)
Далее, в Calls грохнуть всё и залить в неё уникальные записи из временной таблицы.


Cu   (2003-01-24 14:42:00) [10]

мда.. кроме как вытащить distinct-ом во временную таблицу
то что тебе в итоге надо, почистить таблицу и перелить
в неё данные из временной таблицы придумать не могу :-/


stone   (2003-01-24 14:42:00) [11]

примерно так:

delete from Calls from Calls c where exists (select * from Calls where Field1 = c.Field1 and ... Field20 = c.Field20 and ID > c.ID)


Behemoth   (2003-01-24 14:37:00) [12]

Простите.... MS SQL 2000


Anatoly Podgoretsky   (2003-01-24 14:35:00) [13]

У тебя база есть?


Наверх

Титульная страница Поиск, карта сайта Написать письмо