2012-02-01 57 views
1

我想从我的数据库中删除重复的数据。我发现a nice example on here of how to do this on an oracle database使用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 

所以,我看了一下delete syntaxany syntax的使用权限,但找不到任何错误的查询...任何想法?

+0

MySQL不喜欢这里的'AS'operator。但我不知道如何解决这个问题,而不会出现锯齿。 – 2012-02-01 09:10:41

+0

我对“ANY”语法不太确定,但是您是否尝试过使用“IN”语句。例如WHERE a.id IN(SELECT b.id ... – Robert 2012-02-01 09:15:36

回答

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; 
+0

谢谢!这正是我所需要的... ...仍然好奇为什么原始查询不起作用?我试过它在所有情况下都有或没有'as',因为在查看Juergen的答案后可以使用...... – sanukcm 2012-02-01 10:23:35

0

AS运算符不能在MySQL中使用DELETE语句。

试试这个(未验证):

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 
) 
+0

感谢您的回答Juergen!我试过这个查询,并得到错误'您无法指定目标表'a'用于FROM子句中的更新... ... – sanukcm 2012-02-01 10:01:23