Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

[ORACLE] Удаление повторяющихся записей [D7]


Страницы:   1 2

McSimm2 ©   (2003-09-08 13:29:00) 

Есть возможность в запросе удалить повторяющиеся записи, причём не все, а одну оставить?
value1
value2
value1
value1
value3

На выходе
value1
value2
value3


Danilka   (2003-09-08 15:46:00) [1]

Vlad © (08.09.03 15:40)
более полное утверждение, наверное вот-такое: "не приведи господь работать с таблицами без первичного ключа." :))


Danilka   (2003-09-08 15:45:00) [2]

McSimm2 (08.09.03 15:39)
правда, если записей прилично, например около миллиона, а повторяющихся не очень много, то будут тормоза великие, список в секции IN(..) очень большой. Тогда имеет смысл вот-такой запрос:

DELETE FROM aaa
WHERE ROWID IN (
(SELECT ROWID
FROM aaa)
MINUS
(SELECT MAX(ROWID)
FROM aaa
GROUP BY ff))


andriy   (2003-09-08 15:42:00) [3]

А я бы создал процедуру, в котрой курсором бы прогнался по таблице. Но это я бы сделал...
:)


Vlad   (2003-09-08 15:40:00) [4]

>Danilka © (08.09.03 15:33) [29]
Не приведи господь так удалять!


McSimm2   (2003-09-08 15:39:00) [5]

Danilka © (08.09.03 15:33) [29]
Точно !
Спасибо !


Danilka   (2003-09-08 15:33:00) [6]

вобщем, вот-так работает. :))

DELETE FROM aaa
WHERE ROWID NOT IN (
SELECT MAX(ROWID)
FROM aaa
GROUP BY ff)


Danilka   (2003-09-08 15:24:00) [7]

McSimm2 (08.09.03 14:45)
дык, группировка-же, надо вот-так:
DELETE FROM aaa
WHERE NOT (ROWID IN (SELECT max(rowid)
FROM (select ff from aaa group by ff)
)
)

и еще, был какой-то пример с minus, вроде шустрее на порядок.


NickBat   (2003-09-08 15:24:00) [8]

А если так:

delete from test
where f1 in
(select f1
from test
group by f1
having count(f1)>1)


roottim   (2003-09-08 15:15:00) [9]

> Нельзя выбрать RowID из представления, содержащего Distinct, Group By, и т.д.
конечно нельзя!

можно это сделать и вложенным запросом. но если полей много, то лень будет их записывать :)
а что, стандартным методом нельзя, или связи сильно потеряются...

CREATE TABLE TMP1 AS SELECT DISTINCT * FROM MYTABLE;
DROP TABLE MYTABLE;
ALTER TABLE TMP1 RENAME TO MYTABLE


roottim   (2003-09-08 15:15:00) [10]

> Нельзя выбрать RowID из представления, содержащего Distinct, Group By, и т.д.
конечно нельзя!

можно это сделать и вложенным запросом. но если полей много, то лень будет их записывать :)
а что, стандартным методом нельзя, или связи сильно потеряются...

CREATE TABLE TMP1 AS SELECT DISTINCT * FROM MYTABLE;
DROP TABLE MYTABLE;
ALTER TABLE TMP1 RENAME TO MYTABLE


roottim   (2003-09-08 15:14:00) [11]

> Нельзя выбрать RowID из представления, содержащего Distinct, Group By, и т.д.
конечно нельзя!

можно это сделать и вложенным запросом. но если полей много, то лень будет их записывать :)
а что, стандартным методом нельзя, или связи сильно потеряются...

CREATE TABLE TMP1 AS SELECT * FROM MYTABLE;
DROP TABLE MYTABLE;
ALTER TABLE TMP1 RENAME TO MYTABLE


McSimm2   (2003-09-08 14:45:00) [12]

Vlad © (08.09.03 14:40) [22]

На запрос

DELETE FROM aaa
WHERE NOT (ROWID IN (SELECT rowid
FROM (select ff from aaa group by ff)
)
)


Выводит след. ошибку:
Нельзя выбрать RowID из представления, содержащего Distinct, Group By, и т.д.


Vlad   (2003-09-08 14:40:00) [13]

Ну да... погорячился. Вложенный селект нужен тогда.
Типа Select rowid from (запрос где Group by)


McSimm2   (2003-09-08 14:37:00) [14]

Vlad © (08.09.03 14:30) [20]

where not (rowid in (select rowid from table group by нужные поля))

Как можно сделать групировку по полям, а select - по rowid ???
RowId явно должно тоже в group by быть, что само по себе ерунда....


Vlad   (2003-09-08 14:30:00) [15]

сорри... where not (rowid in (select rowid from table group by нужные поля))


Vlad   (2003-09-08 14:29:00) [16]

delete from table where rowid not in (select rowid from table group by нужные поля)
Удалит вааще все дубли.


Reindeer Moss Eater   (2003-09-08 14:10:00) [17]

Удалить записи из таблицы
где такие-то условия описанные выше и
где ROWID не равен максимальному ROWIDиз группы записей удовлетворяющих условию указанному выше


McSimm2   (2003-09-08 14:07:00) [18]

Reindeer Moss Eater © (08.09.03 14:01) [13]
А подробнне можно ?

Таблицу создавал не я ...


DenK_vrtz   (2003-09-08 14:07:00) [19]

Reindeer Moss Eater ©, запрос в студию! :-)


Vlad   (2003-09-08 14:02:00) [20]

2 Reindeer Moss Eater © (08.09.03 14:01) [13]
Верняк говорит ! А я -то и забыл :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо