![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить все дубликаты записей
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]У тебя база есть?