![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
[ORACLE] Удаление повторяющихся записей [D7]
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]
Верняк говорит ! А я -то и забыл :)