powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление дубликатов в таблице одним запросом
25 сообщений из 32, страница 1 из 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
25 сообщений из 32, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Удаление дубликатов в таблице одним запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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