Удаление дублирующихся строк (MySQL 5.7) - PullRequest
0 голосов
/ 02 марта 2019

У меня около 75 000 записей / строк, и после использования

SELECT WWW, COUNT(*) c FROM pmd_listings GROUP BY WWW HAVING c > 1;

я обнаружил, что у меня есть около 9000 дубликатов (основываясь только на одном столбце, возможно, чуть меньше в действительности).Я могу использовать group by только с агрегатными функциями (не совсем уверен, что это значит), но я хочу удалить дубликаты, если строки совпадают в этих столбцах (чтобы убедиться, что они дубликаты)

"friendly_url" "www" и "listing_zip" Внутри таблицы "pmd_listings".

Я попытался запустить эту симуляцию:

https://pastebin.com/QWCb5jJ4

Но я получаю следующееошибка:

 #1054 - Unknown column 'c1.id' in 'where clause'

Как я могу это подтвердить?Помощь очень ценится!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы можете использовать left join с delete:

delete pl
    from pmd_listings pl left join
         (select pl2.friendly_url, pl2.www, pl2.listing_zip, min(id) as min_id
          from pmd_listings pl2
          group by pl2.friendly_url, pl2.www, pl2.listing_zip
         ) pl2
         on pl2.id = pl.id
    where pl2.id is null;

Подзапрос агрегации находит все минимальные идентификаторы для комбинаций трех столбцов.left join находит совпадения с этими идентификаторами, а where означает, что все несовпадающие строки, то есть все, кроме первой строки, удалены.

0 голосов
/ 02 марта 2019

Псевдоним c1 должен указываться между DELETE и FROM для MySql.Попробуйте так:

DELETE FROM pmd_listings
WHERE id NOT IN (
  SELECT t.id FROM ( 
    SELECT MIN(id) id
    FROM pmd_listings
    GROUP BY friendly_url, www, listing_zip
  ) t
)
...