Удаление повторяющихся данных из таблицы с помощью MySQL

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

Нижний запрос из этого ответа (только выбор повторяющихся строк) работает в MySQL, но запрос на удаление (см. ниже) не работает...

"DELETE FROM studios as a
 WHERE a.id >
       ANY (SELECT b.id
              FROM studios as b
             WHERE a.name = b.name
               AND a.email  = b.email
            )"

Ошибка, которую я получаю:

You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'a
 WHERE a.id >
       ANY (SELECT b.id
              FROM studios as b
           ' at line 1

Итак, я искал правильный синтаксис удаления и любой синтаксис для использования, но не смог найти ничего плохого в моем запросе... Есть идеи?


person sanukcm    schedule 01.02.2012    source источник
comment
MySQL здесь не нравится оператор AS. Но я не знаю, как решить это без псевдонимов.   -  person juergen d    schedule 01.02.2012
comment
Я не слишком уверен в синтаксисе «ЛЮБОЙ», но пробовали ли вы просто использовать статус «В». например ГДЕ a.id IN (SELECT b.id ...   -  person Robert    schedule 01.02.2012


Ответы (2)


Попробуйте этот запрос -

DELETE t1 FROM studios t1
  JOIN (SELECT MIN(id) id, name, email FROM studios GROUP BY name, email) t2
    ON t1.id <> t2.id AND t1.name = t2.name AND t1.email = t2.email;
person Devart    schedule 01.02.2012
comment
Спасибо! Это сделало именно то, что мне было нужно... Все еще любопытно, почему исходный запрос не работал? Я пробовал это как с as, так и без него во всех случаях, когда as` можно было использовать после просмотра ответа Юргена... - person sanukcm; 01.02.2012

Оператор AS не работает с операторами DELETE в MySQL.

Попробуйте это (непроверено):

DELETE FROM a using studios a
WHERE a.id >
ANY 
(
    SELECT b.id
    FROM studios as b
    WHERE a.name = b.name
    AND a.email  = b.email
)
person juergen d    schedule 01.02.2012
comment
Спасибо за ответ, Юрген! Я попробовал этот запрос и получил ошибку You can't specify target table 'a' for update in FROM clause... - person sanukcm; 01.02.2012