Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как удалить с таблицы повторяющееся записи?? / 11 сообщений из 11, страница 1 из 1
06.10.2004, 18:24
    #32726764
TarasV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
Как удалить с таблицы повторяющееся записи(в одном поле)??
Но оставиль одну запись - любую.
...
Рейтинг: 0 / 0
06.10.2004, 18:29
    #32726771
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
use d:\t1 in 0
select * from t1 into curs qq1 group by field1
use in t1
select qq1
copy to d:\t1.dbf
...
Рейтинг: 0 / 0
06.10.2004, 19:15
    #32726829
SergeyPl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
leafuse d:\t1 in 0
select * from t1 into curs qq1 group by field1
use in t1
select qq1
copy to d:\t1.dbf
Грубо и не правильно, даже не работает!
...
Рейтинг: 0 / 0
06.10.2004, 19:22
    #32726845
TarasV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
SergeyPl leafuse d:\t1 in 0
select * from t1 into curs qq1 group by field1
use in t1
select qq1
copy to d:\t1.dbf
Грубо и не правильно, даже не работает!

Согласен!!!
...
Рейтинг: 0 / 0
06.10.2004, 19:26
    #32726853
TarasV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
Таблица
ID name
1 n1
2 n2
2 n22
2 n222
3 n3

Надо оставить только одну запись с ID=2 и любим name
...
Рейтинг: 0 / 0
06.10.2004, 21:37
    #32726947
SergeyPl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
См. форум MS SQL Server и благодарим тех, кто там отвечает!
К сожалению, VFP не поддерживает удаление по запросу.
Вариант без сохранения уникального кода (: для таблицы с первичным ключом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
use t_test in  0 
SELECT * FROM t_test ;
   INTO CURSOR Cur1 ;
   WHERE f_id in (select min(f_id) as f_id ;
                        from t_test ;
                        group by f_name having count(f_id)> 1 )

select t_test
zap
INSERT INTO t_test (f_name,f_pfone) ;
         SELECT f_name,f_pfone FROM cur1
...
Рейтинг: 0 / 0
06.10.2004, 21:43
    #32726949
SergeyPl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
TarasVТаблица
ID name
1 n1
2 n2
2 n22
2 n222
3 n3

Надо оставить только одну запись с ID=2 и любим name

Для этого варианта:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
use t_test in  0 
SELECT * FROM t_test ;
   INTO CURSOR Cur1 ;
   WHERE id in (select min(id) as id ;
                        from t_test ;
                        group by name having count(id)> 1 )

select t_test
zap
INSERT INTO t_test (id,name) ;
         SELECT id,name FROM cur1
Для таблицы спервичным ключом придется организовать более сложную обработку...
...
Рейтинг: 0 / 0
06.10.2004, 23:32
    #32726983
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
SergeyPl
К сожалению, VFP не поддерживает удаление по запросу.


Простите за глупый вопрос - А Вы сами то пробовали?

Так - как версия не указана то открою Вам секрет - с 8 версии это уже поддерживается, а в 9 сняты уже многие ограничения...

Например:

Код: plaintext
DELETE FROM tmp.dbf WHERE codeco in (select codeco FROM tmp.dbf WHERE codeco='A')

уже работает
...
Рейтинг: 0 / 0
07.10.2004, 09:29
    #32727207
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
Грубо и не правильно, даже не работает!
у меня запрос из Вашей тестовой таблицы выбрал
1 n1
2 n222
3 n3

те любое значение
где не работает ?
считали зарплату было куча записей двойных всё время так делали и всё до копейки сходилось
так где грабли?
...
Рейтинг: 0 / 0
07.10.2004, 09:37
    #32727227
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
Внимательно следите за руками

1) Использование индекса типа UNIQUE

Код: plaintext
1.
2.
3.
4.
5.
6.
select MyTab
DELETE ALL
SET DELETED OFF
INDEX ON MyField TO idxUnique UNIQUE COMPACT
RECALL ALL
SET INDEX TO
DELETE FILE idxUnique.idx

2) Если ЕСТЬ индекс по нужному полю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET DELETED ON
LOCAL lvPrevValue
select MyTab
SET ORDER TO MyField
GO TOP
SCAN
	lvPrevValue = MyTab.MyField
	SKIP
	DELETE WHILE MyTab.MyField=m.lvPrevValue
	SKIP - 1 
ENDSCAN

3) Если НЕТ индекса по нужному полю

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET DELETED ON
LOCAL lvPrevValue, lnRecno
select MyTab
SET ORDER TO  0 
GO TOP
SCAN
	lvPrevValue = MyTab.MyField
	lnRecno = Recno()
	DELETE FOR MyTab.MyField=m.lvPrevValue AND Recno()<>m.lnRecno
	GO m.lnRecno
ENDSCAN
...
Рейтинг: 0 / 0
07.10.2004, 10:36
    #32727385
SergeyPl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить с таблицы повторяющееся записи??
TO Sergey Ch !!!
Признаю! В 8 работает !!! :)

Тогда совсем красиво:

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT * FROM t_test ;
   INTO CURSOR Cur1 ;
   WHERE f_id in (select min(F_ID) as F_ID ;
      from t_test group by F_NAME having count(F_ID)> 1 )

DELETE FROM t_test WHERE f_id NOT IN (SELECT f_id FROM cur1)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как удалить с таблицы повторяющееся записи?? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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