Как удалить повторяющиеся строки сгруппировать два столбца? - PullRequest
0 голосов
/ 08 февраля 2019

В моей базе данных есть таблица (babynames), в которой есть повторяющиеся записи, которые я хочу удалить.

Ex Записи в моей таблице

id category_id  baby_name   url_role    
1      6        karthik     karthik    
2      7        kalaivanan  kalaivanan    
3      4        arun        arun    
4      6        vijayakumar vijayakumar    
5      6        karthik     karthik    
6      6        karthik     karthik    
7      4        karthik     karthik
9      6        vijayakumar vijayakumar    
8      4        karthik     karthik

Мне нужен результат

id category_id  baby_name   url_role    
1      6        karthik     karthik    
2      7        kalaivanan  kalaivanan    
3      4        arun        arun    
4      6        vijayakumar vijayakumar    
7      4        karthik     karthik

Мне нужно удалить дубликаты записей, найденных в той же категории, с тем же именем baby_name.Я не хочу создавать новую таблицу с различными записями для этого.Мне нужно удалить дубликаты записей из существующей таблицы без создания новой таблицы.

  DELETE FROM babynames 
   WHERE id NOT IN 
                  (   SELECT MIN(id)  
                        FROM babynames 
                    GROUP BY baby_name,category_id
                  )

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Пожалуйста, попробуйте это

 DELETE FROM babynames 
   WHERE id   IN 
                  (  
                  select id from (SELECT id ,  RANK() OVER (PARTITION BY baby_name,category_id
                 ORDER BY  sale DESC  )rw sales_rank FROM babynames)t1 where rw>1
                  ) 
0 голосов
/ 08 февраля 2019

Вы можете использовать предложение EXISTS, стараясь обернуть внутренний FROM в подзапрос, чтобы избежать страшных

Вы не можете указать целевую таблицу 'x' для обновления вПредложение FROM

ошибка:

DELETE b
FROM babynames b
WHERE EXISTS (SELECT * 
              FROM (SELECT * FROM babynames) b1 
              WHERE b1.category_id = b.category_id
                AND b1.baby_name = b.baby_name
                AND b1.id < b.id)

Вывод:

id  category_id     baby_name       url_role
1   6               karthik         karthik
2   7               kalaivanan      kalaivanan
3   4               arun            arun
4   6               vijayakumar     vijayakumar
7   4               karthik         karthik

Демонстрация на dbfiddle

0 голосов
/ 08 февраля 2019

Чтобы удалить дубликаты записей из таблицы, вы можете сделать, как показано ниже

delete from names 
where id not in 
(
select min(id)
from names 
group by category_id,baby_name,url_role 

  )
0 голосов
/ 08 февраля 2019

В MySQL вы должны использовать JOIN:

DELETE b
    FROM babynames b LEFT JOIN
         (SELECT baby_name, category_id, MIN(id) as min_id
          FROM babynames 
          GROUP BY baby_name,category_id
         ) bb
         ON bb.min_id = b.id
    WHERE bb.min_id IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...