Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление дубликатов записей / 14 сообщений из 14, страница 1 из 1
19.01.2006, 16:58
    #33492467
anton_81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Есть табличка с полями PEOPLE_ID и DAT_PRINT (тип Date ). Некоторые записи дублируются - имеют одинаковые значения в поле PEOPLE_ID .
Как оставить только те записи у которых стоит дата печати ( DAT_PRINT ), а дубликаты этих записей без проставленной даты печати удалить??
...
Рейтинг: 0 / 0
19.01.2006, 17:03
    #33492487
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
delete from <TableName> a where a.PEOPLE_ID in (select b.PEOPLE_ID from <TableName> b where b.People_ID=a.PEOPLE_ID and empty(b.DAT_PRINT))
...
Рейтинг: 0 / 0
20.01.2006, 01:18
    #33493155
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Hi AleksMed!

Это не только дубликаты удалит! А вообще все те записи, где хотя-бы в одном
"дубле" есть пустая дата!!!

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
20.01.2006, 09:06
    #33493295
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Igor Korolyov
Hi AleksMed!

Это не только дубликаты удалит! А вообще все те записи, где хотя-бы в одном
"дубле" есть пустая дата!!!

Posted via ActualForum NNTP Server 1.3

Угу, незачем иметь ID с пустой датой.
...
Рейтинг: 0 / 0
20.01.2006, 10:46
    #33493525
anton_81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Что я сделал не так?:
Я создал таблицу POLISb - копию таблицы POLISa и запустил :

Код: plaintext
delete from POLISa where POLISa.PEOPLE_ID in (select POLISb.PEOPLE_ID from POLISb where POLISb.People_ID=POLISa.PEOPLE_ID and empty(POLISb.DAT_PRINT))

в итоге из таблицы POLISa удалились ВСЕ дублированные записи и записи с пустыми DAT_PRINT .

Дело в том, что таблица у меня одна ( POLISa ) и в ней находяться дублированные (по PEOPLE_ID ) записи. Необходимо удалить ТОЛЬКО дубликаты с пустыми DAT_PRINT !
Есть решение этой задачки???
...
Рейтинг: 0 / 0
20.01.2006, 18:42
    #33495083
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
А что, просто записи с пустыми DAT_PRINT не удалить?
(Это я к тому, что разве они нужны?)
...
Рейтинг: 0 / 0
21.01.2006, 01:53
    #33495376
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Hi anton_81!

1) Что делать если среди дублей будет НЕСКОЛЬКО записей с непустой датой?
2) Что делать если среди дублей ВСЕ записи будут иметь пустую дату?
Ответь сначала на эти вопросы, тогда посмотрим что дальше тебе советовать :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
23.01.2006, 14:29
    #33497393
anton_81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Igor Korolyov
1) Что делать если среди дублей будет НЕСКОЛЬКО записей с непустой датой?
2) Что делать если среди дублей ВСЕ записи будут иметь пустую дату?
Ответь сначала на эти вопросы, тогда посмотрим что дальше тебе советовать :)

1) если несколько - то оставлять все дубли (или оставить одну любую запись если возможно)
2) удалить все эти записи с пустой датой

вот так. очень надеюсь на Вашу помощь :)
...
Рейтинг: 0 / 0
23.01.2006, 19:46
    #33498299
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Может попробовать через select ?
Код: plaintext
1.
2.
3.
select distinct * from TableFrom a where !empty(a.DAT_PRINT) into table temp
select TableFrom
delete all
append from temp
или, если память позволяет (таблица не слилком большая):
Код: plaintext
1.
2.
3.
select distinct * from TableFrom a where !empty(a.DAT_PRINT) into array temp
select TableFrom
delete all
append from array temp
...
Рейтинг: 0 / 0
23.01.2006, 22:47
    #33498487
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
anton_81 Igor Korolyov
1) Что делать если среди дублей будет НЕСКОЛЬКО записей с непустой датой?
2) Что делать если среди дублей ВСЕ записи будут иметь пустую дату?
Ответь сначала на эти вопросы, тогда посмотрим что дальше тебе советовать :)

1) если несколько - то оставлять все дубли (или оставить одну любую запись если возможно)
2) удалить все эти записи с пустой датой

вот так. очень надеюсь на Вашу помощь :)
Можно ли сформулировать условие следующим образом:

1) Удалить ВСЕ записи с пустой датой
2) Среди оставшихся удалить дубли

Отличия заключаются в том, что делать если запись НЕ имеет дублей, но ее дата пустая?

Кстати, таблица имеет уникальный идентификатор записи? Т.е. некое поле, значение которого гарантировано уникально для ВСЕХ записей таблицы. По этому полю дублей быть не может в принципе.
...
Рейтинг: 0 / 0
23.01.2006, 23:15
    #33498509
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Да, кстати, если надо удалить все записи с пустым значением DAT_PRINT вне зависимости от того, есть у них дубли или нет, то можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
SET DELETED OFF
SELECT POLIS
DELETE ALL
INDEX ON PEOPLE_ID TAG Doubl UNIQUE FOR NOT EMPTY(DAT_PRINT)
RECALL ALL
DELETE TAG Doubl

Правда, это требует эксклюзивного открытия таблицы.

Остануться только уникальные записи с заполненным значением DAT_PRINT. Но также будут удалены и записи у которых нет дублей, но значение поля DAT_PRINT не указано.
...
Рейтинг: 0 / 0
24.01.2006, 03:50
    #33498587
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Hi anton_81!

>> 1) Что делать если среди дублей будет НЕСКОЛЬКО записей с непустой датой?
>> 2) Что делать если среди дублей ВСЕ записи будут иметь пустую дату?

> 1) если несколько - то оставлять все дубли
ВСЕ - это значит и с пустой датой тоже???

> (или оставить одну любую запись если возможно)

в SQL нету понятия "любую" - впрочем и просто с точки зрения формальной
логики это невозможно. В лучшем случае можно оперировать физическим порядком
следования записей - но SQL этого конечно не сделает - впрочем простым
циклом можно всё решить.

> 2) удалить все эти записи с пустой датой

И тут ты противоречишь сам себе - ты же говорил что нужно оставить одну из
группы - а теперь говоришь что нет...

Впрочем что спросил то и получи:

Код: plaintext
1.
2.
3.
DELETE FROM POLISa ;
    WHERE POLISa.PEOPLE_ID in ;        (SELECT POLISa.PEOPLE_ID ; 
FROM POLISa ;            GROUP BY People_ID ;            HAVING COUNT(*) > 
 1 )        AND EMPTY(POLISa.DAT_PRINT)
В чём был смысл делать копию
таблицы я не понял.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
24.01.2006, 13:00
    #33499597
anton_81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Igor Korolyov
Впрочем что спросил то и получи:


Спасибо, всё сработало! :)
Тему закрываю 8)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.09.2010, 11:32
    #36831147
manitor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записей
Многие программы могут поиск и удаление дубликатов файлов . Скачай эту, например.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление дубликатов записей / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]