Как я могу удалить все повторяющиеся строки, включая исходную в SQL?

#mysql #sql #phpmyadmin

#mysql #sql #phpmyadmin

Вопрос:

У меня есть таблица, подобная этой:

 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
  

Ответ №1:

Вы можете удалить их из 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;
  

Ответ №2:

Вы можете использовать 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);