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

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

Удаление дубликатов в DBF [D7, dBase, FoxPro]


Олег ©   (2008-06-26 07:25:00) 

Мастера, подскажите почему не работает этот запрос?

DELETE t1 FROM tab t1 , tab t2 WHERE t1.ID = t2.ID

Запрос выполняю при помощи TQuery.

Ошибка:
Invalid use of keyword.
Token: t1


Виталий Панасенко(дом)   (2008-06-26 12:16:00) [1]


> Palladin ©   (26.06.08 10:23) [16]
>
> а мне'то что пробовать, я и так вижу, что удалятся обе записи

ну, я как истинный хохол - не повирю, докы не перевирю:-)... работает


Олег   (2008-06-26 11:12:00) [2]


> Виталий Панасенко(дом)   (26.06.08 09:23) [9]
> delete from tablename t1 where t1.key = (select t2.key from
> tablename t2 where t2.key=t1.key group by t2.key having
> count(*)>1)t2 и t1 - одна и та же таблица

Спасибо! Но действительно слишком долго...

поэтому за это

> Виталий Панасенко(дом)   (26.06.08 09:27) [10]

Огромное спасибо! :)


Palladin   (2008-06-26 10:23:00) [3]

а мне'то что пробовать, я и так вижу, что удалятся обе записи


Виталий Панасенко(дом)   (2008-06-26 10:22:00) [4]

запрос такого вида - работает, т.е. ключ - одно поле


Виталий Панасенко(дом)   (2008-06-26 10:18:00) [5]


> Palladin ©   (26.06.08 10:08) [13]
>
>
> > Виталий Панасенко ©   (26.06.08 10:01) [12]
>
> а пробовал с двумя дублями?
> а правда одну запись оставляет?

а сам не пробовал?


Palladin   (2008-06-26 10:08:00) [6]


> Виталий Панасенко ©   (26.06.08 10:01) [12]

а пробовал с двумя дублями?
а правда одну запись оставляет?


Виталий Панасенко   (2008-06-26 10:01:00) [7]


> Palladin ©   (26.06.08 09:32) [11]

главное, работает.. а можно или нет... это другой вопрос..:-)


Palladin   (2008-06-26 09:32:00) [8]

и что? в FoxPro прямо так можно?

t1.key = (select t2.key from tablename t2 where t2.key=t1.key group by t2.key having count(*)>1)


Виталий Панасенко(дом)   (2008-06-26 09:27:00) [9]

только быстрее это дело сделать при помощи небольшой программки из двух компонентов - кверика и тейбла.. построить индекс по ключу, сделать его активным для тейбла, а в кверик выбрать ключ и количество повторений. далее тейблом ищем первую запись по ключу, и в цикле удаляем N-1 раз.. где N - количество повторений для данного значения ключа.. вчера такое нужно было то же сделать.. на 50000 записях запросом можно было выспаться.. а программка слепленная за 5 минут отработала считанные секунды


Виталий Панасенко(дом)   (2008-06-26 09:23:00) [10]

delete from tablename t1 where t1.key = (select t2.key from tablename t2 where t2.key=t1.key group by t2.key having count(*)>1)
t2 и t1 - одна и та же таблица


Олег   (2008-06-26 08:58:00) [11]

любую)


Sergey13   (2008-06-26 08:55:00) [12]

> [5] Олег   (26.06.08 08:47)
> одну надо оставить

Какую конкретно?


Palladin   (2008-06-26 08:55:00) [13]

расслабся, без существования уникального ключа одним запросом ты этого не сделаешь


Олег   (2008-06-26 08:47:00) [14]


> Удалять надо все дублирующиеся записи или одну какую-то
> оставлять?

одну надо оставить


> А что ты используешь для удаления?

TQuery


Anatoly Podgoretsky   (2008-06-26 08:42:00) [15]

А что ты используешь для удаления?

Дельфи же не понимает таких слов DELETE t1 FROM tab t1 , tab t2 WHERE t1.ID = t2.ID

И что об этом говорит твоя справка?


Sergey13   (2008-06-26 08:42:00) [16]

> [2] Олег   (26.06.08 07:48)
> Может есть какой другой способ удалить из DBF файла дублирующиеся по одному полю записи?
Удалять надо все дублирующиеся записи или одну какую-то оставлять?


Олег   (2008-06-26 07:48:00) [17]

Этот пример я нашел где-то на просторах интернета... если убрать эту t1 то ругается на запятую.

Может есть какой другой способ удалить из DBF файла дублирующиеся по одному полю записи?


Loginov Dmitry   (2008-06-26 07:41:00) [18]

> Invalid use of keyword.
> Token: t1



> DELETE t1FROM


Ругается на t1. Оно здесь лишнее.


Наверх

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