powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление дубликатов в таблице одним запросом
32 сообщений из 32, показаны все 2 страниц
Удаление дубликатов в таблице одним запросом
    #39323293
olga802005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица TABLE1(Field char(5)).
Нужно удалить все дубликаты

Код: plsql
1.
delete from TABLE1 where Field not in (select Field from TABLE1 group by Field)


Это не работает. Ведь в таблице нет уникального идентификатора. Как тогда придумать запрос?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323298
UseRowid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olga802005,

Delete from t where t.rowid in (select min(rowid) from t group by [double signs])
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323307
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привыкайте писать test cases.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table t(n number);
insert into t values(1);
insert into t values(1);
insert into t values(1);
insert into t values(2);
insert into t values(2);


Delete from t where t.rowid in (select min(rowid) from t group by n) 

select * from t
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323371
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm
Код: plsql
1.
Delete from t where t.rowid in (select min(rowid) from t group by n)

А где мозг?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323381
UseRowid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
Подумаешь, описАлся. Сразу "где моск?"
Конечно, not in.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323384
UseRowid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Элик,

Блин, зачем сбиваешь. In, но having count(1)>1
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323385
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[/quot]А где мозг?[/quot]

У меня на месте.

Тест кейс, говорю, пишите, все грабли сразу видны будут.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323396
olga802005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdmТест кейс, говорю, пишите, все грабли сразу видны будут.

А Apex подойдет с веб интерфейсом для тестов запросов если нет на ПК Оракла?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323398
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разумеется.
Более того, я подозреваю, что никакого смысла открывать APEX и закрывать стандартный доступ к ораклу нет, так что доступ у вас, скорее всего есть, и неважно, на какой Оракл машине.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323410
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UseRowidБлин, зачем сбиваешь. In, но having count(1)>1Запускать следует в цикле?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323411
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdmУ меня на месте.Чудак, учись отвечать адресно , чтобы не выглядеть севшим в лужу.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323413
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm, для таких простых тесткейсов обычно не создают табличек а делают inline views с dual.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39323479
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olga802005Нужно удалить все дубликаты

Если у таблицы есть колонка Identity, то можно так:
Код: sql
1.
2.
3.
4.
delete table1
where Identity_Field not in (Select Min(Identity_Field) 
                             From table1 
                             Group by Field)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удаление дубликатов в таблице одним запросом
    #39568423
Фотография Foxter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olga802005Нужно удалить все дубликаты

Тоже недавно потребовалось. Простейшим оказалось это решение (может окажется полезным):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
DELETE FROM table
WHERE ROWID IN 
(
 SELECT ROWID FROM table -- Все rowid
 MINUS -- Отсечет только один (минимальный - min(rowid)), остальные будут удалены
 SELECT MIN (ROWID) FROM table GROUP BY val_1, val_2, val_3 -- Группируем по всем полям (либо ключевым, если нужны не полные дубликаты)
); 
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568431
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxter,

Точно IN ?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568443
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Foxter,

Трижды читать из таблицы? :)
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568449
Фотография Foxter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artas,

Ну да, подзапрос сформирует список rowid (по группам схожих строк за вычетом минимального, который и будет изъят из всех rowid таблицы). А сам запрос удалит все строки с этими rowid из списка.

Вроде все логично, в чем - то видите подвох?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568453
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxterВроде все логично, в чем - то видите подвох?Возьми первый ответ в теме, заменив in на not in.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568454
Фотография Foxter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadFoxterВроде все логично, в чем - то видите подвох?Возьми первый ответ в теме, заменив in на not in.

Да, согласен, так еще проще.
Век живи, век учись )))
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568477
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olga802005Есть таблица TABLE1(Field char(5)).
Нужно удалить все дубликаты

Код: plsql
1.
delete from TABLE1 where Field not in (select Field from TABLE1 group by Field)



Это не работает. Ведь в таблице нет уникального идентификатора. Как тогда придумать запрос?

FAQ sql.ru
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568526
Фотография Foxter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olga802005Есть таблица TABLE1(Field char(5)).
Нужно удалить все дубликаты

Код: plsql
1.
delete from TABLE1 where Field not in (select Field from TABLE1 group by Field)


Это не работает. Ведь в таблице нет уникального идентификатора. Как тогда придумать запрос?

Группировать по всем полям записи.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568529
на собеседовании часто задают такую задачку.

обычно алгоритм :
1) сделать distinct по всем полям, таким оразом удалятся все дубликаты (ну подразумевается, что записи в разном регистре или там с запятыми пробелами различающимися- не дубли), 2) зафигачить результаты запроса во временную таблицу,
3) затереть исходную табличку
4) зафигачить туда данные из временной таблицы.

дедупликация называется.

а одним запросом - хз

мне на собеседованиях наверное 4-ех один и тот же вопрос задавали


еще часто про нарастающие итоги одним запросом спрашивают. Прям поголовно
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568549
ДобрыйМакс,

ну раз один баян раскопали, то грех не привести решение из другого ... :)
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568729
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх решение из другого ... :)
Stax.. жосткий такой :)
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568760
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
/*ДУБЛИ*/
SELECT * FROM T1 A WHERE (SELECT COUNT(*) FROM T1 B WHERE B.P1 = A.P1 AND....) > 1


А дальше, хоть MAX(ROWID) оставить хоть MIN(ROWID) или вообще найти зацепку другую.
Удалять в зависимости от того что есть правильно - первая или последняя запись (а может "средняя" :) )
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568910
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxter,

Можно и так, я думаю

Код: plsql
1.
2.
3.
4.
delete from TABLE1 
where RowId in (select lag(RowId) over (partition by Field /*набор полей*/
                                                           order by null/*порядок для оставить*/) 
                         from TABLE1)



Или так, проще выставлять сортировку для оставшихся
Код: plsql
1.
2.
3.
4.
delete from TABLE1 
where RowId not in (select lag(null,1,RowId) over (partition by Field /*набор полей*/
                                                           order by null/*порядок для оставить*/) 
                         from TABLE1)
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568920
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLИли такnot in null
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568932
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousДобрый Э - Эх решение из другого ... :)
Stax.. жосткий такой :)

надеюсь пользоваться merge не будут (кроме дба)

зы
мне нравится вариат с индексом

....
stax
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568933
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-MaximaXXLИли такnot in null

Что то тупанул , сенкс
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39568998
Staxandrey_anonymousпропущено...

Stax.. жосткий такой :)

надеюсь пользоваться merge не будут (кроме дба)

зы
мне нравится вариат с индексом

....
stax

а почему тебе не нравится мерж?
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39569029
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакса почему тебе не нравится мерж?

А потому что ты доку не читаешь:

докaSpecify the DELETE where_clause to clean up data in a table while populating or updating it. The only rows affected by this clause are those rows in the destination table that are updated by the merge operation. The DELETE WHERE condition evaluates the updated value, not the original value that was evaluated by the UPDATE SET ... WHERE condition. If a row of the destination table meets the DELETE condition but is not included in the join defined by the ON clause, then it is not deleted. Any delete triggers defined on the target table will be activated for each row deletion.


Т.e. MERGE вначале выполнит UPDATE/INSERT и только затем DELETE? Оно тебе надо?

SY.
...
Рейтинг: 0 / 0
Удаление дубликатов в таблице одним запросом
    #39569145
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакса почему тебе не нравится мерж?

зачем такие сложности, если есть замечательный rowid

ps
там условие было с хитринкой

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


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