Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Убрать записи двойники / 25 сообщений из 36, страница 1 из 2
06.12.2016, 15:56
    #39361318
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Добрый день!
Зашел в тупик, прошу помощи.
Упрощенная модель задачи. В таблице есть два поля id1 и id2. Записи, в которых id1 || id2 = id2 || id1 считаются "двойниками" и нужно одну из них убрать (любую)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
with s as
 (select 1 as id1,
         2 as id2
    from dual
  union all
  select 3 as id1,
         4 as id2
    from dual
  union all
  select 5 as id1,
         6 as id2
    from dual
  union all
  select 2 as id1,
         1 as id2
    from dual
  union all
  select 4 as id1,
         3 as id2
    from dual
  union all
  select 7 as id1,
         8 as id2
    from dual
  union all
  select 9 as id1,
         0 as id2
    from dual
 )

select *
from s



Результат

ID1 ID2 1 2 3 4 5 6 2 1 4 3 7 8 9 0

Нужно что бы осталось

ID1 ID2 1 2 3 4 5 6 7 8 9 0
...
Рейтинг: 0 / 0
06.12.2016, 15:59
    #39361326
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorD,
Если не путаю, то отловить их можно так:
Код: sql
1.
2.
3.
SELECT T.ID1, T.ID2,T1.ID1,T1.ID2
FROM TABLEA T
JOIN  TABLEA T1 ON T.ID1=T1.ID2 AND T.ID2=T1.ID1
...
Рейтинг: 0 / 0
06.12.2016, 16:03
    #39361330
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
londinium,
отловить не проблема. У меня был такой вариант

Код: plsql
1.
2.
3.
4.
...
select *
from s
where s.id1 || s.id2  in (select t.id2 || t.id1  from s t )



Нужно убрать по одной записи у двойников, а как, не знаю...
...
Рейтинг: 0 / 0
06.12.2016, 16:09
    #39361338
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
less + group by + min
...
Рейтинг: 0 / 0
06.12.2016, 16:11
    #39361340
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorD,

Нужно вывести уникальную пару select-ом или удалить дубли из таблицы?
...
Рейтинг: 0 / 0
06.12.2016, 16:15
    #39361345
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
AmKad,

Нужно построить select таким образом, что бы там не было дублей.
...
Рейтинг: 0 / 0
06.12.2016, 16:16
    #39361347
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
... т.е. из двух дублирующих строк осталась одна (любая)
...
Рейтинг: 0 / 0
06.12.2016, 16:22
    #39361353
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Код: plsql
1.
2.
select distinct least(id1, id2), greatest(id1, id2)
from s


+ если есть null-ы, то допилишь сам.
...
Рейтинг: 0 / 0
06.12.2016, 16:29
    #39361357
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorD,


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
with s as
 (select 1 as id1,
         2 as id2
    from dual
  union all
  select 3 as id1,
         4 as id2
    from dual
  union all
  select 5 as id1,
         6 as id2
    from dual
  union all
  select 2 as id1,
         1 as id2
    from dual
  union all
  select 4 as id1,
         3 as id2
    from dual
  union all
  select 7 as id1,
         8 as id2
    from dual
  union all
  select 9 as id1,
         0 as id2
    from dual
 )
select least(id1,id2) a,greatest(id1,id2) b -- ,count(*) c
from s
group by least(id1,id2) ,greatest(id1,id2);

...
Рейтинг: 0 / 0
06.12.2016, 16:31
    #39361359
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
СПАСИБО!!!
...
Рейтинг: 0 / 0
06.12.2016, 16:33
    #39361361
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
least/greatest сменит ориентацию некоторым бирюкам.
...
Рейтинг: 0 / 0
06.12.2016, 16:36
    #39361363
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Без смены ориентации
Код: plsql
1.
2.
3.
4.
5.
6.
select id1, id2
from
   (select s.*, row_number() over (partition by least(id1, id2), greatest(id1, id2) order by id1, id2) rn
    from s
   )
where rn = 1;
...
Рейтинг: 0 / 0
06.12.2016, 16:51
    #39361379
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorD
Код: plsql
1.
s.id1 || s.id2

Это шутка?
...
Рейтинг: 0 / 0
06.12.2016, 17:08
    #39361401
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Elic,

это не решение, это подход, который оказался ошибочным. :) Знаю, что так делать нельзя
...
Рейтинг: 0 / 0
06.12.2016, 17:10
    #39361403
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Если серьезно, то было так to_char(id1) || ' -' || to_char(id2)
...
Рейтинг: 0 / 0
06.12.2016, 21:29
    #39361517
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
-2-least/greatest сменит ориентацию некоторым бирюкам.

Только если оная присутствует (намек на NULL для тех кто не понял).

SY.
...
Рейтинг: 0 / 0
07.12.2016, 07:33
    #39361576
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorDЕсли серьезно, то было так to_char(id1) || ' -' || to_char(id2)Т.е. про expression list не слыхал?
...
Рейтинг: 0 / 0
07.12.2016, 13:43
    #39361795
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
ElicIgorDЕсли серьезно, то было так to_char(id1) || ' -' || to_char(id2)Т.е. про expression list не слыхал?
Не буду лгать - не использовал на практике. Почитал документацию, покрутил с вышеизложенным примером - не получилось.
Буду рад, если выложите рабочий вариант, и я узнаю что-то новое для себя :)
Спасибо.
...
Рейтинг: 0 / 0
07.12.2016, 13:49
    #39361805
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorDпокрутилПродемонстрируй.
...
Рейтинг: 0 / 0
07.12.2016, 14:00
    #39361814
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
ElicIgorDпокрутилПродемонстрируй.
Код: plsql
1.
2.
3.
4.
5.
6.
select *
from s 
group by grouping sets
  ((id1, id2),
   (id2, id1)
  )
...
Рейтинг: 0 / 0
07.12.2016, 14:07
    #39361819
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Пробуй здесь:IgorD
Код: plsql
1.
where s.id1 || s.id2  in (select t.id2 || t.id1  from s t )
...
Рейтинг: 0 / 0
07.12.2016, 18:36
    #39362076
Убрать записи двойники
IgorD,
Может я не понял вопрос, но что мешает написать что-то вроде:
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT * FROM
( запрос к таблице s, возвращающий все "двойники" )
WHERE id1 < id2
UNION ALL
SELECT * FROM
( запрос к таблице s, возвращающий все, кроме "двойников" )
...
Рейтинг: 0 / 0
07.12.2016, 22:48
    #39362181
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
IgorD,

Давайте все-таки определимся 1,1111 и 11,111 это двойники? Я понимаю, что по условиям упрощенной задачи это так, но вдруг в оригинале нет. А может и да... :)
...
Рейтинг: 0 / 0
08.12.2016, 11:24
    #39362380
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Сергей Арсеньев,
Двойники считаются те строки в который одинаковые Id, в независимости от их размещения в колонках, т.е.
1 и 1111 двойники с 1111 и 1
...
Рейтинг: 0 / 0
08.12.2016, 11:27
    #39362384
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убрать записи двойники
Нетянепонял,
Из двойников/тройников/... нужно оставить только одну запись
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Убрать записи двойники / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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