【问题标题】:Removing Duplicate Data from a Table using MySQL使用 MySQL 从表中删除重复数据
【发布时间】:2015-08-20 16:23:13
【问题描述】:

我正在尝试从我的数据库中删除重复数据。我找到了a nice example on here of how to do this on an oracle database

该答案的底部查询(仅选择重复的行)在 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 来使用,但我的查询没有发现任何问题......有什么想法吗?

【问题讨论】:

  • MySQL 不喜欢这里的ASoperator。但我不知道如何在没有别名的情况下解决这个问题。
  • 我不太确定 'ANY' 语法,但您是否尝试过仅使用 'IN' 语句。例如WHERE a.id IN (SELECT b.id ...

标签: mysql duplicate-removal sql-delete any


【解决方案1】:

试试这个查询 -

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;

【讨论】:

  • 谢谢!这正是我所需要的......仍然好奇为什么原始查询不起作用?在查看 Juergen 的答案后,我在所有可以使用 as` 的情况下尝试了使用和不使用 as...
【解决方案2】:

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
)

【讨论】:

  • 感谢您的回答于尔根!我试过这个查询,得到了错误You can't specify target table 'a' for update in FROM clause...
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
相关资源
最近更新 更多