我必须编写一个SQL查询来删除名为Person
的表中所有重复的电子邮件条目,仅根据其最小ID保留唯一的电子邮件。 ID是此表的主键列。
这是我写的查询:
delete from Person
where Email not in (select distinct Email from Person)
但是我得到这个错误:
您不能在FROM子句中指定目标表“ Person”进行更新
答案 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 ;