Как удалить дубликаты записей в таблице / представлении в Oracle? - PullRequest
0 голосов
/ 31 октября 2011

У меня есть представление nat_gas_readings_view в Oracle, что я обнаружил некоторые дубликаты, появляющиеся из ниоткуда.В течение нескольких месяцев не было никаких признаков дубликатов до этой прошлой недели.Ниже приведены некоторые примеры данных, которые я собрал с моей точки зрения.Я хотел бы написать запрос, чтобы удалить эти дубликаты.Если это возможно, кто-нибудь может объяснить, как это происходит, и помочь мне создать запрос, чтобы удалить дубликаты из представления.Спасибо.

DATETIMESTAMP                 BOF            EAF             LEVY           SHOP

10/31/2011 13:00:01     3564729     933776          12459       307
10/31/2011 13:00:01     3564729     933776      12459       307
10/31/2011 12:00:08     3563079     933446          12459       307
10/31/2011 12:00:08     3563079     933446      12459       307
10/31/2011 11:00:09     3561659     933121      12459       307
10/31/2011 11:00:09     3561659     933121      12459       307
10/31/2011 10:00:10     3560636     932802      12458       307
10/31/2011 09:00:08     3559548         932481      12450       307
10/31/2011 09:00:08     3559548     932481      12450       307

Ответы [ 2 ]

1 голос
/ 31 октября 2011

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

Один из способовизбавиться от дубликатов - это изменить запрос в представлении, добавив DISTINCT в выборку, которая делает представление.

И я бы исключил дубликаты, когда они вводятся, путем проверки или создания уникального ключа.

0 голосов
/ 01 ноября 2011

Самый простой способ удаления дубликатов - использовать rowid, например:

delete from nat_gas_readings ng1 
where rowid <> (select max (rowid) from nat_gas_readings ng2
where ng1.datetimestamp = ng2.datetimestamp
and ng1.bof = ng2.bof 
and ng1.eaf = ng2.eaf
and ng1.levy = ng2.levy
and ng1.shop = ng2.shop)

Но представление не будет иметь rowid.Пожалуйста, опубликуйте свое определение представления - возможно, именно это создает дупс!Если view def в порядке, возможно, удалите дубликаты из базовой таблицы, используя rowid, как указано выше.Лучше всего применить уникальное ограничение, чтобы убедиться, что это не может произойти в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...