Как я могу удалить все дублирующиеся строки, включая исходную в SQL? - PullRequest
3 голосов
/ 15 марта 2019

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

id   id2
1    435  
2    345
3    345
4    567
5    456
6    987
7    987

Здесь id2 345 и 987 повторяются дважды, поэтому я хочу удалить обе строки.Моя новая таблица должна выглядеть так:

id   id2
1    435  
4    567
5    456

Ответы [ 2 ]

4 голосов
/ 15 марта 2019

Вы можете удалить их из select, просто используя агрегацию:

select min(id), id2
from t
group by id2
having count(*) = 1;

Если вы хотите удалить их из таблицы, используйте join и group by:

delete t
    from t join
         (select id2, count(*) as cnt
          from t
          group by id2
         ) tt
         on t.id2 = tt.id2
    where cnt > 1;
0 голосов
/ 15 марта 2019

Вы можете использовать not exists:

select *
from table t
where not exists (select 1 from table t1 where t1.id2 = t.id2 and t1.id <> t.id);

Так же вы можете удалить записи:

delete t
from table t 
where exists (select 1 from table t1 where t1.id2 = t.id2 and t1.id <> t.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...