Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление дубликатов. / 7 сообщений из 7, страница 1 из 1
05.11.2018, 03:28
    #39727978
Piastry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
Есть таблица table с дубликатами данных:
A
------
1
1
1
2
3
4
4
5
5

Селект для удаления:

select A,
row_number() over (partition by A order by A) as RN
from TABLE
where RN > 1

Выводит ошибку:

ORA-00904: "RN": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 4 Column: 7

Селект без where выводит результат:

A RN
------
1 1
1 2
1 3
2 4
3 1
4 1
4 2
5 1
5 2

Как удалить дубликаты?
...
Рейтинг: 0 / 0
05.11.2018, 07:24
    #39727981
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
Как удалить дубликаты или как исправить твой запрос?
...
Рейтинг: 0 / 0
05.11.2018, 07:31
    #39727982
Piastry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
andreymxКак удалить дубликаты или как исправить твой запрос?
Как удалить дубликаты.
...
Рейтинг: 0 / 0
05.11.2018, 08:38
    #39727990
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
www.sql.ru/faq/faq_topic.aspx?fid=711

Тут смотрел?
...
Рейтинг: 0 / 0
05.11.2018, 17:05
    #39728146
Piastry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
andreymxwww.sql.ru/faq/faq_topic.aspx?fid=711

Тут смотрел?

Если применить, как там предлагают:

delete TABLE
where A in (select A
from (select A,
row_number() over (partition by A order by A) rn
from TABLE)
where rn > 1);

то останется из этого:

A RN
------
1 1
1 2
1 3
2 1
3 1
4 1
4 2
5 1
5 2

=>

A RN
------
2 1
3 1

А надо, что бы осталось:

A RN
------
1 1
2 1
3 1
4 1
5 1
...
Рейтинг: 0 / 0
05.11.2018, 17:17
    #39728154
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
Piastry,

авторЕсли в таблице нет уникального ключа или индекса, по которому можно отсеивать дубликаты (в примере используется уникальность поля TEST_DUPLICATE.duplicate_id), то можно использовать псевдо столбец ROWID


delete t where rowid not in (select min(rowid) r from t group by a)

....
stax
...
Рейтинг: 0 / 0
05.11.2018, 17:27
    #39728159
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов.
PiastryЕсли применить, как там предлагают:

delete TABLE
where A in (select A
from (select A,
row_number() over (partition by A order by A) rn
from TABLE)
where rn > 1);

там такого не предлагали.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление дубликатов. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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