Как сохранить только первый уникальный элемент и удалить его дубликаты в oracle? - PullRequest
0 голосов
/ 27 марта 2020

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

Delete from table where id
In (select id from (select 
 id, row_number() 
  over(partition by id) 
rn from table where rn>1)

Вышеуказанное может работать, но это не стандартно sql почти для всех баз данных, таких как раздел, может не поддерживаться в большинстве других баз данных. То, что я пытался, было ниже, это возможно, используя group by. Я попробовал ниже, но я не уверен, что это будет работать или нет. Любые предложения и какие оптимизированы

  //using group by    
Delete from table where id
In (select id from(select 
 id from table 
  Group by id 
  Having sum(1)>1) 

  )

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Как говорится в вопросе

, удалите его дубликаты в oracle

, затем

delete from your_table a
where a.rowid > (select min(b.rowid)
                 from your_table b
                 where b.id = a.id
                );
1 голос
/ 27 марта 2020

Вы можете использовать exists следующим образом:

Delete from your_table t
Where exists (select 1 from your_table t1
Where t1.id = t.id
And t1.rowid > t.rowid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...