我试图删除数据库中所有重复的记录,并维护一个唯一记录。
以下是我的查询:
SELECT * FROM reg02_maininfo INNER JOIN(
SELECT farmername,farmermobile,rowuuid FROM reg02_maininfo GROUP BY concat(farmername,farmermobile) HAVING COUNT(concat(farmername,farmermobile)) > 1 order by concat(farmername,farmermobile))
temp ON reg02_maininfo.farmermobile = temp.farmermobile and reg02_maininfo.farmername = temp.farmername;
以下是我的删除查询
DELETE s FROM reg02_maininfo s INNER JOIN(
SELECT farmername,farmermobile,rowuuid FROM reg02_maininfo GROUP BY concat(farmername,farmermobile) HAVING COUNT(concat(farmername,farmermobile)) > 1 order by concat(farmername,farmermobile))
temp ON s.farmermobile = temp.farmermobile and s.farmername = temp.farmername;
如何避免删除所有重复记录,而是维护唯一记录
答案 0 :(得分:0)
因为我来自移动设备,所以没有检查语法,但是这样可以解决问题:
DELETE FROM reg02_maininfo WHERE rowuuid NOT IN (SELECT
MIN(rowuuid) FROM reg02_maininfo GROUP BY
concat(farmername,farmermobile))
因此,基本上,第一步是为每个组选择min rowuuid,然后删除其他行,以便每个组中都保留一个。
答案 1 :(得分:0)
对于具有重复行的concat(农民名,农民移动员),您可以尝试选择min rowudid并检查是否不计算rowid
DELETE s
FROM reg02_maininfo s
INNER JOIN (
SELECT concat(farmername,farmermobile) name_mobile
FROM reg02_maininfo
GROUP BY concat(farmername,farmermobile)
HAVING COUNT(concat(farmername,farmermobile)) > 1
) t1 on t1.name_mobile = concat(s.farmername,s.farmermobile)
LEFT JOIN (
SELECT min(rowuuid ) rowuuid
FROM reg02_maininfo
GROUP BY concat(farmername,farmermobile)
HAVING COUNT(concat(farmername,farmermobile)) > 1
) t pn t.rowuuid = s.rowuuid
where t.rowuuid is null
或假设concat(s.farmername,s.farmermobile,s.rowuuid)是有效的pk
DELETE s
FROM reg02_maininfo s
INNER JOIN (
SELECT concat(farmername,farmermobile,rowuuid) my_pk
FROM reg02_maininfo
GROUP BY concat(farmername,farmermobile)
HAVING COUNT(concat(farmername,farmermobile)) > 1
) t1 on t1.my_pk = concat(s.farmername,s.farmermobile, rowuuid)
LEFT JOIN (
SELECT min(concat(farmername,farmermobile,rowuuid) ) my_pk
FROM reg02_maininfo
GROUP BY concat(farmername,farmermobile)
HAVING COUNT(concat(farmername,farmermobile)) > 1
) t2 on t2.my_pk = (concat(s.farmername,s.farmermobile,s.rowuuid)
where t2.my_pk is null