powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как правильно удалить
7 сообщений из 7, страница 1 из 1
как правильно удалить
    #32735181
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здравствуйте
вопрос такой:
как правильно удалить мне записи которые повторяютя сразу в трех полях
т.е. есть база plat.dbf с полями fam c(20), name c(10), otch c(15), sum_pl c(10,2), mes n(2), god c(4)
мне нужно удалить записи которые встречаются больше одного раза
ПРИМЕР если в полях nam c(20), name c(10), otch c(15) с значением
nam , name , otch
ИВАНОВ ИВАН ИВАНОВИЧ
встречается запись
nam , name , otch
ИВАНОВ ИВАН ИВАНОВИЧ
или
nam , name , otch
ИВАНОВ ПЕТР ИВАНОВИЧ
то
ИВАНОВ ИВАН ИВАНОВИЧ удалить обоих
а оставить только
ИВАНОВ ПЕТР ИВАНОВИЧ

ВООБЩЕ ТО ЭТО КОМАНДА
SELECT fam, name, otch, COUNT(*) FROM plat GROUP BY 1,2,3 HAVING COUNT(*)>1
МНЕ ВЫВОДИТ ТАК НАЗЫВАЕМЫХ ДВОЙНИКОВ, НО КАК ИХ УДАЛИТЬ
...
Рейтинг: 0 / 0
как правильно удалить
    #32735253
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГЕОРГИЙ18здравствуйте
вопрос такой:
как правильно удалить мне записи которые повторяютя сразу в трех полях
мне нужно удалить записи которые встречаются больше одного раза
ВООБЩЕ ТО... КОМАНДА
SELECT fam, name, otch, COUNT(*) FROM plat GROUP BY 1,2,3 HAVING COUNT(*)>1
МНЕ ВЫВОДИТ ТАК НАЗЫВАЕМЫХ ДВОЙНИКОВ, НО КАК ИХ УДАЛИТЬ

А дальше все просто:
ВАРИАНТ 1:
Внешний цикл:
Код: plaintext
1.
2.
3.
4.
5.
SELECT QUERY &&Или другой курсор, куда ложатся "Двойники"
GO TOP
SCAN
  <здесь будет внутренний цикл>
ENDSCAN

Внутренний цикл:
Код: plaintext
1.
2.
3.
4.
  SELECT PLAT
  GO TOP
  DELETE FOR fam=QUERY.FAM AND name=QUERY.NAME AND otch=QUERY.OTCH
  SELECT QUERY

ВАРИАНТ 2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
* Выбираем "двойников"
SELECT fam, name, otch, COUNT(*) FROM plat GROUP BY  1 , 2 , 3  HAVING COUNT(*)> 1  INTO CURSOR QUERY

* Выбираем всех, кроме "двойников"
SELECT A.* FROM plat A WHERE A.FAM+A.NAME+A.OTCH NOT IN (SELECT fam+ name+otch FROM QUERY) INTO TABLE QUERY1

* Очищаем всю (!) исходную таблицу
SELECT PLAT
DELETE ALL &&или ZAP, если таблица открыта в режиме EXCLUSIVE

*Наполняем таблицу "правильными" плательщиками
APPEND FROM QUERY1

ВАРИАНТ 3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
* Выбираем "двойников"
SELECT fam, name, otch, COUNT(*) FROM plat GROUP BY  1 , 2 , 3  HAVING COUNT(*)> 1  INTO CURSOR QUERY

* Выбираем всех, кроме "двойников"
SELECT A.* FROM plat A WHERE A.FAM+A.NAME+A.OTCH NOT IN (SELECT fam+ name+otch FROM QUERY) INTO TABLE QUERY1

* Удаляем исходную таблицу
USE IN PLAT
ERASE PLAT.dbf 

*Переименовываем QUERY1 в PLAT
RUN RENAME QUERY1.DBF PLAT.DBF
ВАРИАНТ 3 работает в случае свободных таблиц или в FPD. Будет ли он работать в случае, если таблица включена в контейнер БД - не знаю. Надо пробовать...
...
Рейтинг: 0 / 0
как правильно удалить
    #32735544
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала, воспользоваться поиском по данному форуму

http://www.sql.ru/forum/actualthread.aspx?tid=128155
...
Рейтинг: 0 / 0
как правильно удалить
    #32736593
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВСЕ СПАСИБО
Станислав C.
2 ой вариант подгодит
...
Рейтинг: 0 / 0
как правильно удалить
    #32737331
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DELETE FROM plat ;
WHERE EXISTS ;
(SELECT fam, name, otch ;
FROM plat ttt ;
WHERE ttt.fam == plat.fam AND ;
ttt.name == plat.name AND ;
ttt.otch == plat.otch ;
GROUP BY 1, 2, 3 ;
HAVING COUNT(*) > 1)

Версию фокса ты не указал, значит предполагаем наличие VFP8.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
как правильно удалить
    #32737791
ГЕОРГИЙ18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш вариант тоже правильный, но я не понял что означает команда "EXISTS"
в хелпе нет и в книгах я непойму, что означает команда.
спасибо
Igor Korolyov
...
Рейтинг: 0 / 0
как правильно удалить
    #32737851
AlikWishin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ГЕОРГИЙ18Ваш вариант тоже правильный, но я не понял что означает команда "EXISTS"
в хелпе нет и в книгах я непойму, что означает команда.
спасибо
Igor Korolyov

EXISTS функцbя SQL. Говорит она о том, что есть ли выборка( в скобках) или нет,
Ну это типа
Select ... into table/cursor <Name>
А потом:
If RecCount(<Name>) == 0
Exit
Else
....
EndIf

Так вот EXISTS -> .T. Если RecCount()>0 и -> .F. Если RecCount()==0
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как правильно удалить
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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