Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дурацкий налогоплательщик. Дубли записей / 17 сообщений из 17, страница 1 из 1
25.01.2007, 08:06
    #34280631
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
Бухгалтер ответила на какой-то вопрос "налогоплательщика" и он создал абсолютно одинаковые кортежи для каждой записи, т.е. в таблице есть дубликат у каждой строки. База на FP, самого его нет, но есть просмоторщик таблиц. Как при помощи SQL ЗАПРОСА УДАЛИТЬ дубли. Нет различающихся критериев, при помощи которых можно было бы это сделать.
...
Рейтинг: 0 / 0
25.01.2007, 08:31
    #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
25.01.2007, 09:20
    #34280746
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
если ID - уникальное поле, тогда сделать довольно просто.
...
Рейтинг: 0 / 0
25.01.2007, 09:26
    #34280760
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
в том то и дело что нет, я плохо знаю FP, но знаю немного БД, и где здесь (фрагмент выше) указано что ID уникальный?
...
Рейтинг: 0 / 0
25.01.2007, 09:29
    #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
25.01.2007, 09:36
    #34280782
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
Пока писал DML запрос, уже ответили, что поле id не уникальное.
Может сделать уникальное поле, удалить дубли а потом грохнуть это поле? Главное не навредить и создать бэкап ;)
...
Рейтинг: 0 / 0
25.01.2007, 09:41
    #34280796
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
там ид одинаковые
...
Рейтинг: 0 / 0
25.01.2007, 09:43
    #34280802
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
а кто его знает как потом приложение отреагирует, получится ли создать уникальное поле, многие СУБД не позволяют делать это пока не будет удалено несоответствие в записях, а их более 400
...
Рейтинг: 0 / 0
25.01.2007, 09:52
    #34280822
Maltsev Max
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
Найди номер записи с которой начинаются дубли

Delete from MyTable Where RecNo()>XXX
...
Рейтинг: 0 / 0
25.01.2007, 09:57
    #34280836
t03
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
25.01.2007, 10:13
    #34280885
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
для этого, наверное, потребуется fox? Завтра попробую.
...
Рейтинг: 0 / 0
25.01.2007, 10:27
    #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
29.01.2007, 11:05
    #34288934
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
загружаю базу в fox, пытаюсь выполнить запрос, а он гоаорит что не найден файл nextword.prg? Что делать
...
Рейтинг: 0 / 0
29.01.2007, 15:26
    #34290071
alex_zima
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
А вот и файл nextword.prg
...
Рейтинг: 0 / 0
30.01.2007, 06:54
    #34291457
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
to alex_zima:
А что он делает и куда его поместить? Расскажите для общего образования
...
Рейтинг: 0 / 0
30.01.2007, 15:13
    #34293183
alex_zima
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
Файл поместить рядом с базой, загружаемой в фоксе
...
Рейтинг: 0 / 0
02.02.2007, 05:01
    #34300764
Романыч84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дурацкий налогоплательщик. Дубли записей
Все то же говорит, как только начинаю выполнять запрос, опять то же сообщает. Где посмотреть что ему нужна эта prg и для чего она нужна
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дурацкий налогоплательщик. Дубли записей / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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