powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дурацкий налогоплательщик. Дубли записей
17 сообщений из 17, страница 1 из 1
Дурацкий налогоплательщик. Дубли записей
    #34280631
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бухгалтер ответила на какой-то вопрос "налогоплательщика" и он создал абсолютно одинаковые кортежи для каждой записи, т.е. в таблице есть дубликат у каждой строки. База на FP, самого его нет, но есть просмоторщик таблиц. Как при помощи SQL ЗАПРОСА УДАЛИТЬ дубли. Нет различающихся критериев, при помощи которых можно было бы это сделать.
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280666
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE "spisok" (
  "id" INTEGER NOT NULL ,
  "tabno" INTEGER NOT NULL ,
  "inn" CHAR ( 12 ) NOT NULL ,
  "strax" CHAR ( 14 ) NOT NULL ,

....

);

 CREATE INDEX "id" ON "spisok" ("id");

 CREATE INDEX "name" ON "spisok" ("firstname", "middlename", "lastname");

 CREATE INDEX "spravki" ON "spisok" ("spravki");

 CREATE INDEX "tabno" ON "spisok" ("tabno");


Вот, структуру вытянул, может как-то за индексы зацепиться?
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280746
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если ID - уникальное поле, тогда сделать довольно просто.
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280760
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и дело что нет, я плохо знаю FP, но знаю немного БД, и где здесь (фрагмент выше) указано что ID уникальный?
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280768
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
delete ;
from spisok s1 ;
inner join  (select max(id) as maxId, tabno,inn,strax from spisok group by  2 , 3 , 4  having count(*)> 1 ) s2 ;
on s1.tabNo=s2.tabNo and s1.inn=s2.inn and s1.strax=s2.strax ;
where id<>maxId 
На сколько я знаю, работает только на 9-ке.
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280782
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока писал DML запрос, уже ответили, что поле id не уникальное.
Может сделать уникальное поле, удалить дубли а потом грохнуть это поле? Главное не навредить и создать бэкап ;)
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280796
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там ид одинаковые
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280802
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а кто его знает как потом приложение отреагирует, получится ли создать уникальное поле, многие СУБД не позволяют делать это пока не будет удалено несоответствие в записях, а их более 400
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280822
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Найди номер записи с которой начинаются дубли

Delete from MyTable Where RecNo()>XXX
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280836
t03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так. У меня этот модуль как раз исправляет базы от таких случаев, только потом после того как получишь курсор с дублирующими записями нужно удалить их ручками через команду DELETE. В принципе используя эту идею можешь написать под себя модулек или SQLзапрос.

&& Сколько дублирующих записей
= DoubleRecord('FM_ZATR' - имя базы, в которой нужно найти дублирующие записи
'KD_FIRM, Zatr_dt, Kd_zatr, InpTip' - перечень полей, которые не должны быть дублируемые )

сам вызов функции
&& Сколько дублирующих записей
Dbl_rec = DoubleRecord('FM_ZATR', 'KD_FIRM, Zatr_dt, Kd_zatr, InpTip')

*-----------------------------------------------------------------------
*
* Чтобы показать дублирующиеся записи, можно использовать SQL-запрос
* показанный ниже. В результате получится курсор содержащий каждую группу
* дублирующихся записей, показанную один раз и количество повторений в таблице
* этой записи.
*
* если дублирующих записей нет - закрываем курсор,
* если есть - курсор остается
*
FUNCTION DoubleRecord
PARAMETERS NameBase, StrWithNamePole
LOCAL d_r_t_a, D_Rec

D_Rec = 0
d_r_t_a = SELECT()

SELECT &StrWithNamePole ;
FROM &NameBase ;
GROUP BY &StrWithNamePole;
HAVING COUNT(*)>1 ;
INTO CURSOR DoublRec

SELECT DoublRec && список дублированных записей
COUNT TO D_Rec && сколько дублирующих записей
IF D_Rec = 0 && если дублирующих записей нет - закрываем курсор
USE
ENDIF
SELECT(d_r_t_a) && в "старую" рабочую область

RETURN D_Rec
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280885
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для этого, наверное, потребуется fox? Завтра попробую.
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34280940
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал так:
отбэкапить базы и выполнить сл. код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SET DELETED OFF
select spisok
ALTER TABLE spisok ADD COLUMN NewId I
replace NewId with Recno() all 
delete spisok ;
from  (select max(newId) as maxNewId, id, tabno,inn,strax ;
        from spisok group by  2 , 3 , 4 , 5  having count(*)> 1 ) s2 ;
        where NewId<>maxNewId and spisok.tabNo=s2.tabNo and ;
        spisok.inn=s2.inn and spisok.strax=s2.strax
ALTER TABLE spisok drop COLUMN NewId
SET DELETED ON
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34288934
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
загружаю базу в fox, пытаюсь выполнить запрос, а он гоаорит что не найден файл nextword.prg? Что делать
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34290071
alex_zima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот и файл nextword.prg
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34291457
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to alex_zima:
А что он делает и куда его поместить? Расскажите для общего образования
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34293183
alex_zima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Файл поместить рядом с базой, загружаемой в фоксе
...
Рейтинг: 0 / 0
Дурацкий налогоплательщик. Дубли записей
    #34300764
Романыч84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все то же говорит, как только начинаю выполнять запрос, опять то же сообщает. Где посмотреть что ему нужна эта prg и для чего она нужна
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дурацкий налогоплательщик. Дубли записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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