powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление дубликатов.
7 сообщений из 7, страница 1 из 1
Удаление дубликатов.
    #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
Удаление дубликатов.
    #39727981
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как удалить дубликаты или как исправить твой запрос?
...
Рейтинг: 0 / 0
Удаление дубликатов.
    #39727982
Piastry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymxКак удалить дубликаты или как исправить твой запрос?
Как удалить дубликаты.
...
Рейтинг: 0 / 0
Удаление дубликатов.
    #39727990
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
www.sql.ru/faq/faq_topic.aspx?fid=711

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


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