Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите с запросом delete  [new]
Alexey181
Member

Откуда: default city
Сообщений: 907
Всем доброго дня!
Имеется таблица t с двумя колонками a и b. Необходимо из таблицы удалить повторяющиеся записи где a и b имеют одинаковые значения и повторяются более 2-х раз, сделать одним запросом)))
7 июл 08, 17:42    [5898492]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
А если повторяются ровно 2 раза, то оставить все как есть?
7 июл 08, 17:46    [5898528]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Alexey181
Member

Откуда: default city
Сообщений: 907
нет если два раза, то удалить, оставить только не повторяющиеся значения
7 июл 08, 17:51    [5898566]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
https://www.sql.ru/faq/faq_topic.aspx?fid=711

?
7 июл 08, 17:53    [5898581]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Gareev Dmitriy
Member

Откуда:
Сообщений: 32
Я бы хотел добавить к ссылке, что insert into table2(...)select distinct ... from table1 работает НАМНОГО быстрее. Только для этого работает ещё одна таблица.
7 июл 08, 17:57    [5898634]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Sashko81
Member

Откуда: Киев
Сообщений: 103
Gareev Dmitriy
Я бы хотел добавить к ссылке, что insert into table2(...)select distinct ... from table1 работает НАМНОГО быстрее. Только для этого работает ещё одна таблица.

ну так тогда уж
create table2(...) as select distinct ... from table1
7 июл 08, 18:07    [5898748]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
Стандартный вариант, который испокон веков предлагался в HELP от SQL*Plus (в FAQ не приведен)
DELETE FROM t X
WHERE EXISTS (SELECT * FROM t Y
              WHERE X.a = Y.a
                AND X.b = Y.b
                AND X.rowid > Y.rowid);
7 июл 08, 18:12    [5898798]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Alexey181
Member

Откуда: default city
Сообщений: 907
DELETE FROM t X
WHERE EXISTS (SELECT * FROM t Y
              WHERE X.a = Y.a
                AND X.b = Y.b
                AND X.rowid > Y.rowid);
Спасибо за помощь, дельное решение :)
7 июл 08, 18:25    [5898868]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Gogen
Member

Откуда: Москва
Сообщений: 420
Alexey181
DELETE FROM t X
WHERE EXISTS (SELECT * FROM t Y
              WHERE X.a = Y.a
                AND X.b = Y.b
                AND X.rowid > Y.rowid);
Спасибо за помощь, дельное решение :)


Это точно. И самое не выгодное по стоимости.
7 июл 08, 18:34    [5898909]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Gogen
Member

Откуда: Москва
Сообщений: 420
чем

delete TEST_DUPLICATE
where rowid not in (
        select min(rowid)
        from TEST_DUPLICATE
        group by value
      );

из примера не понравилось то?
7 июл 08, 18:43    [5898940]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Alexey181
Member

Откуда: default city
Сообщений: 907
Хорошо Gogen, учту и этот вариант ;)
7 июл 08, 18:53    [5898974]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Gogen
чем
.. не понравилось то?

(почти, стебаюсь, однако ;)

Приведенное решение - имхо - рулит для случая, когда
count(*)/count(distinct неявный_id) > 2
Т.е. не когда есть несколько чахлых копиев, а когда среди поганого дерьма есть отдельные
нормальные записи
.
7 июл 08, 19:38    [5899074]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
C#C++
Member [заблокирован]

Откуда: Суровые северные земли
Сообщений: 2636
там на второй странице варианты есть :)
7 июл 08, 19:45    [5899095]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом delete  [new]
Alexey181
Member

Откуда: default city
Сообщений: 907
проверил, отлично работает этот запрос для данной задачи, все просто и понятно
delete from t where rowid not in  (select min(rowid) from t group by a,b)   
топик закрыт )
8 июл 08, 11:58    [5901423]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить