Ошибка удаления дубликатов данных на oracle с использованием sql - PullRequest
2 голосов
/ 28 апреля 2020

У меня есть таблица abc как:

acc   subgroup
720V  A
720V  A
720V  A
720V  A
111   C
222   D
333   E

Мой ожидаемый результат:

    acc   subgroup
    720V  A
    111   C
    222   D
    333   E

Поскольку 720V A является дубликатом, я хочу удалить все три дубликата данных и только одну информацию в моей таблице. Итак, я попытался

DELETE FROM (
select t.*,rownum rn from abc  t where acc='720V') where rn>1;

Итак, я получаю ошибку как:

ORA-01732: data manipulation operation not legal on this view

Как я могу получить ожидаемый результат?

1 Ответ

1 голос
/ 28 апреля 2020

Кажется, в вашей таблице отсутствует столбец первичного ключа, что является большой проблемой. Предполагая, что на самом деле является столбцом первичного ключа PK, мы можем попытаться использовать ROW_NUMBER для выявления любых «дубликатов»:

DELETE
FROM abc t1
WHERE pk IN (SELECT pk
             FROM (
                 SELECT t.pk, ROW_NUMBER() OVER (PARTITION BY acc, subgroup ORDER BY pk) rn
                 FROM abc t) x
             WHERE rn > 1
);

Обратите внимание, что если вы можете жить, сохраняя свои Исходные данные, тогда наиболее целесообразным может быть создание отдельного представления:

CREATE VIEW abc_view AS
SELECT DISTINCT acc, subgroup
FROM abc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...