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

Откуда:
Сообщений: 27
Подскажите не могу придумать как сделать
Есть таблица из 5 колоной id,nameA,nameB,FamA,FamB
нужна найти все записи в которых nameA=nameB и FamA=FamB и удалить вторые записи
Уже второй день голову ломаю пробовал сливать таблицу на саму себя inner join но получается фигня удаляет и оригинал и дубликат.
22 июл 13, 00:28    [14596620]     Ответить | Цитировать Сообщить модератору
 Re: Удалить повторение в таблице  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
_wer_wolf_
Уже второй день голову ломаю пробовал сливать таблицу на саму себя inner join но получается фигня удаляет и оригинал и дубликат.

Запрос то напишите...
22 июл 13, 00:53    [14596719]     Ответить | Цитировать Сообщить модератору
 Re: Удалить повторение в таблице  [new]
_wer_wolf_
Member

Откуда:
Сообщений: 27
Вот запрос на просмотр
select t1.nameA as t1nA,t1.famA as t1fa,t1.namerB as t1nb,t1.famB as t1fb,t1.OID as t1oid,t2.OID as t2oid,t2.namerB as t2nb,t2.famB as t2fb,t2.nameA as t2na,t2.famA as t2fa
from [kr] t1
inner join [kr] t2
on (t1.nameA=t2.namerB and t1.famA=t2.famB)
and (t1.namerB=t2.nameA and t1.famB=t2.famA) and (t1.nameA<>t1.namerB and t1.famA<>t1.famB and t1.OID<>t2.OID)

для удаления оставил в селекте только t2.OID as t2oid и сказал ему group by (попадаются и полные дубликаты) и дал его делейту
22 июл 13, 01:14    [14596752]     Ответить | Цитировать Сообщить модератору
 Re: Удалить повторение в таблице  [new]
Добрый Э - Эх
Guest
_wer_wolf_,
Как вариант...
22 июл 13, 04:48    [14596868]     Ответить | Цитировать Сообщить модератору
 Re: Удалить повторение в таблице  [new]
_wer_wolf_
Member

Откуда:
Сообщений: 27
как то так получаеться или я не правильно понял?

select t1oid,t2oid
from
(
select t1oid,t2oid , ROW_NUMBER() over (PARTITION by a2, b2 order by t1oid, t2oid) num
from
(
select t1oid,t2oid, case when t1oid<t2oid then t1oid else t2oid end a2,
case when t1oid<t2oid then t2oid else t1oid end b2
from
(
select t1.nameA as t1nA,t1.famA as t1fa,t1.namerB as t1nb,t1.famB as t1fb,t1.OID as t1oid,t2.OID as t2oid,t2.namerB as t2nb,t2.famB as t2fb,t2.nameA as t2na,t2.famA as t2fa
from [kr] t1
inner join [kr] t2
on (t1.nameA=t2.namerB and t1.famA=t2.famB)
and (t1.namerB=t2.nameA and t1.famB=t2.famA) and (t1.nameA<>t1.namerB and t1.famA<>t1.famB and t1.OID<>t2.OID)
) t
) t
) t
where num > 1
22 июл 13, 09:37    [14597177]     Ответить | Цитировать Сообщить модератору
 Re: Удалить повторение в таблице  [new]
=)8)
Guest
1. Все записи, в которых nameA=nameB и FamA=FamB разделить на группы с одинаковыми значениями nameA,FamA
2. В каждой группе перенумеровать записи, например, по возрастанию id
3. Удалить все записи с номером >1
22 июл 13, 09:48    [14597240]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить