我有一个SQL查询,它查看出生日期,姓氏和名字的soundex来识别重复项.以下查询查找大约8,000行(我假设这意味着大约有8,000个重复记录).
select dob,last_name,soundex(first_name),count(*)
from clients
group by dob,last_name,soundex(first_name)
having count(*) >1
Run Code Online (Sandbox Code Playgroud)
几乎所有的结果都有2的计数,有几个计数为3,显然,在合并的两个数据库之一中,记录存在两次.
我需要采取的下一步是使用重复标记标记其中一行,并不重要,并用相反的行键标记每一行.有没有办法使用SQL执行此操作?
这应该可以完成您所追求的操作,即一次性更新。
UPDATE FROM clients c
INNER JOIN
(
select dob,last_name,soundex(first_name),MIN(id) as keep
from clients
group by dob,last_name,soundex(first_name)
having count(*) >1
) k
ON c.dob=k.dob AND c.last_name=k.last_name AND soundex(c.first_name)=soundex(k.first_name)
SET duplicateid = NULLIF(k.keep, c.id),
hasduplicate = (k.keep = c.id)
Run Code Online (Sandbox Code Playgroud)
它假设您有 3 列未在问题中说明