прошу помощи в удалении дублирующихся строк
Seamouse
Дата: 18.01.2009 20:43:11
Есть бд. в ней около 400 таблиц
во многих таблицах присутствуют дублирующиеся строки.
причем дубли по всем полям.
Удалять их через enterprise manager - не получается. Ругается.
таких повторений может быть до нескольких тысяч. и не известно в каких таблицах.
Знаний у меня в sql - никаких, практически.
выгружать в txt и править - весьма утомительно.
возможно ли удалить дубли строк без написания сложных скриптов? желательно с примерами.
поиск не помог, кроме того что я могу увидеть дубли, путем простого скрипта, взятого в базе знаний у ms.
спасибо.
Гавриленко Сергей Алексеевич
Дата: 18.01.2009 21:16:28
Seamouse |
Удалять их через enterprise manager - не получается. Ругается. |
Матом?
Seamouse |
возможно ли удалить дубли строк без написания сложных скриптов? |
Типа, команды REMOVE THAT F..G DUPLICATES, что ли?
Seamouse |
кроме того что я могу увидеть дубли, путем простого скрипта, взятого в базе знаний у ms. |
Если вы их можете увидеть, что в чем проблема удалить?
Seamouse
Дата: 18.01.2009 21:20:23
нет. не может удалить т.к. не знает кого именно удалять - для него они все идентичны.
всех удалять я не пробовал, но это и не правильно.
VxS_
Дата: 18.01.2009 21:45:20
хм... а если что-то типа:
create table new_table
(
"A" char(10),
"B" char(10),
"C" char(10)
)
insert new_table select DISTINCT * from old_table
drop table old_table
Cat2
Дата: 18.01.2009 21:49:58
Быстренько, без претензий на оптимальность и скорость.
Если действительно нет первичного ключа.
Создаем в таблице автоинкременентное поле, скажем fid.
delete from t where fid not in
(
select min(fid) from t
group by <все остальные поля>
having count (*) >0
)
Cat2
Дата: 18.01.2009 21:52:47
having я ни к чему приплел.
Это у меня от другой задачи хвостик :)
delete from t where fid not in
(
select min(fid) from t
group by <все остальные поля>
)
Seamouse
Дата: 18.01.2009 22:00:40
Cat2,
а первичного ключа нет. он не создается.
опишу пред историю: упал сервер, бэкапы не сделаны.
при помощи программы recovery for SQL - разобрал базу на скрипты.
скрипты - создают базу, заливают данные, создают индексы..
на моменте создания индексов ( ключей? ) возникает ошибка - есть одинаковые записи.
править "скрипты" нереально, я же не знаю какие данные дублируются.
проверки на уникальность при заполнении таблиц - нет. ( может быть они есть в средствах sqlcmd ?)
Cat2
Дата: 18.01.2009 22:14:15
Seamouse,
Так я и пишу, что надо создать авоикременентное поле, что бы появился первичный ключ.
=================
Однако Вы обманули.
Написали сначала, что Вам известно, что все поля у некоторых записей совпадают.
Однако вам известно только то, что есть совпадения полей по которым Вы желаете создать уникальные индексы. В том числе, возможно, и индекс по первичному ключу.
Seamouse
Дата: 18.01.2009 22:27:06
Написали сначала, что Вам известно, что все поля у некоторых записей совпадают.
- это так. известно.
Однако вам известно только то, что есть совпадения полей по которым Вы желаете создать уникальные индексы. В том числе, возможно, и индекс по первичному ключу.
если есть полное совпадение - то есть и совпадение тех полей, по которым создается индекс.
я пробовал вручную создать новое поле, но внести изменения в дублях - не могу. опять ругается.
поиски в инете привели к $db_key - возможно ли удаление строки таким образом?
Копировать в новые таблицы - не осилю. их много а знаний нет, писать скрипты.
И никого я не обманываю. )) Возможно, не могу полно описать проблему.
Гавриленко Сергей Алексеевич
Дата: 18.01.2009 22:54:12
Seamouse,
Тогда давайте начнем с того, что в рекомендациях написано. Приведите:
- версию севрвера;
- структуру таблицы или таблиц;
- пример текущих данных;
- что надо получить.