如何在SQL查询中标记重复项

Dar*_*ren 5 mysql sql

我有一个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执行此操作?

Ric*_*iwi 6

这应该可以完成您所追求的操作,即一次性更新。

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 列未在问题中说明

  • id:主键
  • plicatedid:指向保留的重复项
  • hasduplicate:布尔值,标记要保留的值