Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Опять двойники....  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Доброго времени суток.
есть таблица dvoyniki, в которую должны попадать записи, у которых дублируется все, кроме ID и NPP. Это первичный ключ и уникальное поле соответственно.
написал запрос
 Insert Into dvoyniki
    (id, npp, surname, name, second_name, at_num, at_ktg, at_date)
    select id, npp, surname, name, second_name, at_num, at_ktg, at_date
      from (select id,
                   npp,
                   surname,
                   name,
                   second_name,
                   at_num,
                   at_ktg,
                   at_date,
                   count(*) over(partition by surname) as cnt_surname,
                   count(*) over(partition by name) as cnt_name,
                   count(*) over(partition by second_name) as cnt_second_name,
                   count(*) over(partition by at_num) as cnt_at_num,
                   count(*) over(partition by at_ktg) as cnt_at_ktg
              from t_regmain)
     where cnt_surname > 1
       and cnt_name > 1
       and cnt_second_name > 1
       and cnt_at_num > 1
       and cnt_at_ktg > 1;
но после выполнения в таблицу заносятся люди, которые и дублируются(то есть все работает вроде правильно) и присутствуюттолько в единственном экземпляре.
Где я втыкаю....
заранее спасибо
13 дек 06, 00:20    [3527646]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
pravednik
Доброго времени суток.
есть таблица dvoyniki, в которую должны попадать записи, у которых дублируется все, кроме ID и NPP. Это первичный ключ и уникальное поле соответственно.
написал запрос

Вы написали совсем другой запрос.
13 дек 06, 00:38    [3527670]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
pravednik
Доброго времени суток.
есть таблица dvoyniki, в которую должны попадать записи, у которых дублируется все, кроме ID и NPP. Это первичный ключ и уникальное поле соответственно.
написал запрос
 Insert Into dvoyniki
    (id, npp, surname, name, second_name, at_num, at_ktg, at_date)
    select id, npp, surname, name, second_name, at_num, at_ktg, at_date
      from (select id,
                   npp,
                   surname,
                   name,
                   second_name,
                   at_num,
                   at_ktg,
                   at_date,
                   count(*) over(partition by surname) as cnt_surname,
                   count(*) over(partition by name) as cnt_name,
                   count(*) over(partition by second_name) as cnt_second_name,
                   count(*) over(partition by at_num) as cnt_at_num,
                   count(*) over(partition by at_ktg) as cnt_at_ktg
              from t_regmain)
     where cnt_surname > 1
       and cnt_name > 1
       and cnt_second_name > 1
       and cnt_at_num > 1
       and cnt_at_ktg > 1;
но после выполнения в таблицу заносятся люди, которые и дублируются(то есть все работает вроде правильно) и присутствуюттолько в единственном экземпляре.
Где я втыкаю....
заранее спасибо

Я не знаю, что здесь "люди" :-) , но at_date на дубликат не нужно проверять ?
13 дек 06, 00:38    [3527671]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
dmidek
но at_date на дубликат не нужно проверять ?

Таки "записи, у которых дублируется все" или "записи, для каждого атрибута которых найдется по записи с похожим атрибутом"?
13 дек 06, 00:40    [3527674]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Извиняюсь за неполное описание

id --Уникальный идентификатор(первичный ключ)
npp--нопер по порядку(уникальное поле)
surname --фамилия
name--имя
second_name--отчество
at_num--номер удостоверения
at_ktg--номер категории
at_date--дата регистрации

В головной таблице есть строки, у которых совпадают surname, name, second-name, at_num, at_ktg

вот мне эти строки и нужно получить и запихнуть в отдельную таблицу
13 дек 06, 00:49    [3527683]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
andrey_anonymous
dmidek
но at_date на дубликат не нужно проверять ?

Таки "записи, у которых дублируется все" или "записи, для каждого атрибута которых найдется по записи с похожим атрибутом"?

Судя по названию таблицы :-) ИМХО pravednik написал то, что надо,
не говоря о забытой (?) дате и том факте,
что надцать count-ов можно заменить одним, например так

count(*) over(partition by surname, name, second_name,at_num,at_ktg,at_date) as cnt_all
13 дек 06, 00:51    [3527687]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
pravednik
Извиняюсь за неполное описание

id --Уникальный идентификатор(первичный ключ)
npp--нопер по порядку(уникальное поле)
surname --фамилия
name--имя
second_name--отчество
at_num--номер удостоверения
at_ktg--номер категории
at_date--дата регистрации

В головной таблице есть строки, у которых совпадают surname, name, second-name, at_num, at_ktg

вот мне эти строки и нужно получить и запихнуть в отдельную таблицу


Чуть разминулись, дата неважна ...
Тогда вроде все ничего ...
А может таблица не была пустой ?
13 дек 06, 00:53    [3527693]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
dmidek
Судя по названию таблицы :-) ИМХО pravednik написал то, что надо,
не говоря о забытой (?) дате и том факте,
что надцать count-ов можно заменить одним, например так
count(*) over(partition by surname, name, second_name,at_num,at_ktg,at_date) as cnt_all

Ай-яй-яй, dmidek, Вы в самом деле полагаете что после "замены" получите эквивалентный оригиналу запрос?
А подумать?
2автор: собственно, dmidek показал один из вариантов правильного решения, только он сам еще, похоже, не до конца понимает в чем разница
13 дек 06, 00:56    [3527695]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Проблема в том, что в таблицу попадают и строки у которых дублируются не все перечисленные атрибуты....
То есть фактически не двойник...
не выполняется WHERE, вернее выполняется но не полностью.....находит две строки, которые из сравниваемых атрибутов отличаются например только удостоверением
13 дек 06, 00:57    [3527696]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
dmidek
pravednik
Извиняюсь за неполное описание

id --Уникальный идентификатор(первичный ключ)
npp--нопер по порядку(уникальное поле)
surname --фамилия
name--имя
second_name--отчество
at_num--номер удостоверения
at_ktg--номер категории
at_date--дата регистрации

В головной таблице есть строки, у которых совпадают surname, name, second-name, at_num, at_ktg

вот мне эти строки и нужно получить и запихнуть в отдельную таблицу


Чуть разминулись, дата неважна ...
Тогда вроде все ничего ...
А может таблица не была пустой ?


это все делается процедурой....перед инсертом идет truncate
13 дек 06, 00:58    [3527697]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116070
andrey_anonymous
dmidek
Судя по названию таблицы :-) ИМХО pravednik написал то, что надо,
не говоря о забытой (?) дате и том факте,
что надцать count-ов можно заменить одним, например так
count(*) over(partition by surname, name, second_name,at_num,at_ktg,at_date) as cnt_all

Ай-яй-яй, dmidek, Вы в самом деле полагаете что после "замены" получите эквивалентный оригиналу запрос?
А подумать?
2автор: собственно, dmidek показал один из вариантов правильного решения, только он сам еще, похоже, не до конца понимает в чем разница

Грешно смеяться над сонными людьми (слабая отмазка).
Написать правильное решение, не понимая это - вот где настоящее искусство

2 pravednik - andrey anonymous совершенно спраедливо намекает, что counts могут относиться
к разным записям ( в строках 1 и 3 совпадают Ивановы, а в строках 1 и 4 - Владимиры).

Рыдая, ухожу спать ...
13 дек 06, 01:08    [3527712]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
Wladislaw
Member

Откуда:
Сообщений: 245
Если я вас правильно понял, то признаком дублирования является совпадение всех полей кроме id, npp. В вашем же запросе сначала разбивается по каждому полю отдельно, а потом считается, соответственно если есть человек у которого имя входит в одну группуБ фамилия в другую и т.д., то для него все count дадут больше 1 и он попадёт в вашу выборку. Вот пример
with t as (select 1 as id,'name' as name, 'surname' as surname from dual
           union all
           select 2 as id, 'name' as name, 'surname' as surname from dual
           union all
           select 3 as id,'name' as name, 'surname1' as surname from dual
           union all
           select 4 as id,'name' as name, 'surname1' as surname from dual
           union all
           select 5 as id,'name1' as name, 'surname' as surname from dual
           union all 
           select 6 as id,'name1' as name, 'surname' as surname from dual
           union all
           select 7 as id,'name1' as name, 'surname1' as surname from dual
           )
select id, name, surname,count(*) over(partition by surname) as cnt_surname,
                                 count(*) over(partition by name) as cnt_name
  from t order by id;
ID	NAME	SURNAME	CNT_SURNAME	CNT_NAME
1	name	surname	         4	                 4
2	name	surname	         4                       4
3	name	surname1	3	                4
4	name	surname1	3	                4
5	name1	surname	        4	                3
6	name1	surname	        4	                3
7	name1	surname1       3	               3
запись "7 name1 surname1" - уникальна, но попала в вашу выборку.
З.Ы.
Неуспел :) ... Пока поставил OracleXE что бы накатать пример, пока, писал пост, всё объяснили многоуважаемые dmidek и andrey_anonymous :)
Ну тогда пошёл и я спать ....
13 дек 06, 01:18    [3527732]     Ответить | Цитировать Сообщить модератору
 Re: Опять двойники....  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Wladislaw
Пока поставил OracleXE что бы накатать пример

Ого... Да Вы просто герой - сервак взгромоздить только заради примера!
Надеюсь, XE найдет себе применение и в более мирных целях :)
Мне оказалось лень даже поднять крышку соседнего бука, где оракель стоит - видимо, старею...
13 дек 06, 01:23    [3527742]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить