Question

I am trying to remove duplicate data from my database. I found a nice example on here of how to do this on an oracle database.

The bottom query from that answer (only selecting the duplicate rows) works in MySQL, but the delete query (see below) does not...

"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
            )"

The error I get is:

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

So, I had a look for the right delete syntax and any syntax to use, but couldn't find anything wrong with my query... Any ideas?

Était-ce utile?

La solution

Try this query -

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;

Autres conseils

The AS operator doesn't work with DELETE statements in MySQL.

Try this (unverified):

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
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top