Как я могу удалить музыканта yonguer в выражении SQL? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть следующая таблица musician_groups:

Table musician groups

Эта таблица отсортирована, но мне нужно удалить дублированные заголовки.

В таблице у меня есть 4 Мастер марионеток Мне нужно получить только первую и удалить остальных.

Мне нужно что-то вроде этого:

Result expected

Клифф Бертон сверху потому что он старше Кирка Хаммета.

Кто-нибудь может осветить меня?

С уважением,

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

«первый» не очень хорошо определен в SQL. Но вы можете оставить одно из имен, например, первое в алфавитном порядке:

delete from musician_groups mg
    where mg.name > (select max(mg2.name)
                     from musician_groups mg2
                     where mg2.title = mg.title
                    );

Если у вас есть столбец id или другой способ выбрать строку, которую вы хотите сохранить, то вы можете использовать это .

Если у вас большая таблица, удаление большого количества строк обходится дорого. Часто самым быстрым способом является повторная вставка в таблицу:

create table temp_musician_groups as
     select distinct on (title) mg.*
     from musician_groups mg
     order by title, name;

truncate table musician_groups;  -- back up the table first!

insert into musician_groups
    select *
    from temp_musician_groups;
0 голосов
/ 06 апреля 2020

Пожалуйста, используйте ниже запрос:

delete from musician_groups 
where id not in (SELECT * from (SELECT MIN(n.id) FROM musician_groups n GROUP BY n.title) x )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...