Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.26;
Скачать: CL | DM;

Вниз

Как удалить дубликаты записей в .dbf?   Найти похожие ветки 

 
Andrei_   (2002-09-03 23:49) [0]

В базе около 80 полей и 80 000 записей.


 
sniknik ©   (2002-09-04 00:18) [1]

самый простой способ
SELECT * INTO [dBase IV;DATABASE=D:\].[TEST1#DBF] FROM (SELECT DISTINCT * FROM [dBase IV;DATABASE=D:\].[TEST#DBF])
проверено работает.
вызов делается из подключения через JET к базе Access. Дубликатом (здесь) считается совпадение по всем полям. Таблици не индексированы. (добавление индекса возможно исказит результат)


 
sniknik ©   (2002-09-04 00:41) [2]

кстати и так работает если тип базы в подключениии указать
SELECT * INTO TEST1 FROM (SELECT DISTINCT * FROM TEST)
подключение
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=dBase IV;Persist Security Info=False
а я то раньше мучился перебором, после начал через связь по выборке с DISTINCT-том удалять, а с Jet-ом все как просто оказалось, только переименовать табличку остается.


 
Виталий Панасенко   (2002-09-04 09:34) [3]

Можно и так:
delete from table1 t1
where 1< (select count(*) from table1 t2 where t1.field1=t2.field1 and t1.field2=t2.field2 и так все поля (можно только ключевые - смотря что понимать под дублем))
Обратить внимание если есть NULL-значение - запрос чуть расшириться.


 
sniknik ©   (2002-09-04 10:31) [4]

Виталий Панасенко->
этот запрос удалит ВСЕ повторяющиеся записи, а ведь одну из них надо оставить,
Andrei_->
нет?


 
Andrei_   (2002-09-04 17:55) [5]

C помощью SQL интересно, но есть только Clipper и файл .dbf, в котором некоторые записи повторяются по 5 раз, а надо оставить только одну.
Дублем считаются записи, в которых все значения полей одинаковые.
Первичного ключа нет. Есть пустые значения.


 
Виталий Панасенко   (2002-09-05 09:10) [6]

sniknik->
Этот запрос удалит ВСЕ записи, кроме ОДНОЙ - проверено


 
Виталий Панасенко   (2002-09-05 09:16) [7]

:-))) Не так выразился: удалит ЛИШНИЕ дубликаты и оставит ОДИН вариант записи - проверено


 
Anatoly Podgoretsky ©   (2002-09-05 09:29) [8]

Работа явно разовая, я бы поступил в данном случае по другому и без SQL
Добавил бы еще одно поле, по нему индекс, в это поле с помощью какой либо хеш функции поместил бы значение.
Дальше при активном индексе с помощью TTable прошелся бы последовательно по всем записям и удалил лишнии, затем упаковка таблицы.
В зависимости от дальнейшего или оставил бы это поле как уникальный индекс или удалил бы, но в любом случае стоит подумать об первичном ключе или его аналоге, на будущее, что бы подобное больше не повторялось


 
Andrei_   (2002-09-05 10:48) [9]

В том-то и дело, Анатолий, что работа не разовая - приходится исправлять чужие ошибки: база ежедневно пополняется пакетами, в которых куча повторов. Вмешаться в процесс пополнения мы не можем - только после него можно делать с базой все что угодно. Вручную эту работу выполнять нереально. Да еще ОС - DOS 6.22


 
Anatoly Podgoretsky ©   (2002-09-05 10:54) [10]

Тогда тоже самое, только на постоянной основе, или в строить в своб программу или отдельной утилитой, главное в этом деле не использовать SQL просто проще другими средствами, под которые заточен Парадоксовский формат - BDE и TTable, чисто навигационные методы, если пойдешь на дополнительное поле, то достаточно делать корректировку для тех записей где оно пустое, но в любом случае это тоже разовая работа, сделал один раз в начале сеанса, далее не требуется


 
NickBat ©   (2002-09-05 12:08) [11]

Согласен с Podgoretsky.

В том же Fox можно написать:

select dist * from TABLE into table NEWTABLE
а затем просто переименовать NEWTABLE->TABLE






Страницы: 1 вся ветка

Текущий архив: 2002.09.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
7-85721
vasya_dvc
2002-07-16 12:15
2002.09.26
Запуск приложения через асм.


6-85622
Brand
2002-07-11 23:07
2002.09.26
ClientSocket, ServerSocket - несколько отправок


1-85547
NVladimir
2002-09-12 14:27
2002.09.26
Объем программы в ОЗУ


1-85476
Zelius
2002-09-16 10:49
2002.09.26
Как пр истарте программы установить Splitter в нулевое положение?


1-85441
Yaro
2002-09-15 22:08
2002.09.26
Hook на вызов API-функций