数据库SQL查询以删除重复的电子邮件

时间:2019-10-14 01:16:32

标签: mysql sql

我必须编写一个SQL查询来删除名为Person的表中所有重复的电子邮件条目,仅根据其最小ID保留唯一的电子邮件。 ID是此表的主键列。

这是我写的查询:

delete from Person 
where Email not in (select distinct Email from Person)

但是我得到这个错误:

  

您不能在FROM子句中指定目标表“ Person”进行更新

3 个答案:

答案 0 :(得分:0)

您正在使用MySQL,它不允许该语法。请改用join

delete p
   from Person p left join
        (select email, min(id) as min_id
         from person p
         group by email
        ) pp
        on pp.id = min_id
   where pp.min_id is null; --no match

当然,您的逻辑仍然是错误的。但是即使使用正确的逻辑,not in / not exists也无法在MySQL中工作。您需要使用某种联接。

答案 1 :(得分:0)

IN表分组到Person后,可以使用Email关键字

delete from Person where id not in (
    select min(id) as ID from Person group by Email)

答案 2 :(得分:0)

您可以尝试一下。

   DELETE p1 FROM Person p1
INNER JOIN Person p2 
WHERE 
    t1.id < t2.id AND 
    t1.Email = t2.Email ;