SQL - Удаление повторяющихся строк без выхода из оригинала - PullRequest
1 голос
/ 07 мая 2020

Как удалить повторяющиеся строки на основе выбранных столбцов, не выходя из оригинала? В этом примере удаление основано на имени и животном.

ID   Name   Animal   Fruit
1    Bob    Dog      Orange   
2    Adam   Dog      Orange
3    Bob    Dog      Apple
4    Adam   Cat      Orange  
5    Bob    Cat      Apple
6    Bob    Hamster  Apple
7    Adam   Cat      Apple

Таким образом, ожидаемый результат будет:

ID   Name   Animal   Fruit  
2    Adam   Dog      Orange 
5    Bob    Cat      Apple
6    Bob    Hamster  Apple

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы можете использовать удаление с присоединением к подзапросу, сгруппированному по имени и животному, имеющему счетчик> 1

     delete m 
     from my_table m 
     inner join (

        select name, animal
        from my_table
        group by name, animal
        having count(*) > 1 

     ) t on t.name = m.name
        and t.animal  = m.animal
0 голосов
/ 08 мая 2020

Я бы сделал это, используя exists:

delete from t
    where exists (select 1
                  from t t2
                  where t2.name = t.name and t2.animal = t.animal and t2.id <> t.id
                 );
0 голосов
/ 07 мая 2020

попробуйте следующее: сначала выберите дубликаты в подзапросе. затем удалите все результаты

delete from mytable T 
left join 
(select count(*) cnt, Name, Animal 
from mytable 
group by Name, Animal) X 
on t.Name = X.Name 
and t.Animal = X.Animal
where cnt>1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...