我有一个包含一些重复信息的表格:Id、姓名、姓氏、出生、个人 key 、个人信息、方向、来源。
Where source 告诉我信息的来源。
重复的信息有唯一的id,我需要删除被骗的信息。 但是,我优先于一些源信息,我需要留下一个,另一个被删除。
另一件事是,另一个源信息有一些我想留下的信息没有的信息,所以我需要将 PersonalKey 重新填充到将要留下的那个,并删除重复的信息。
名为 Pruebas 的表
---Id, Name, Firstname, Lastname, Birth, RFC, Source, PersonalKey---
---2,Juan,Garcia,Escobeddo,1983-08-04,GAED87393, DRV484930, 34233--
---3,Juan,Garcia,Escobedo,1987-08-04,GAED87393, FIN484930, --
---4,Juan,Garcia,Escobedo,1987-08-04,GAED87393, SA484930, --
如你所见:
- ID 是唯一的
- 名字、名字和姓氏重复
- id 2 有一个 PersonalKey 值,但是 3 和 4 没有
- 我希望保留源为“FIN%”的那一行,并删除其他的,但首先我需要确保保留的行获得 PersonalKey 值(IOW,我不想丢失 PersonalKey 值).
提前致谢。
最佳答案
我会在这个查询上运行游标(使用 MySQL SP 编程语言、Java、Python、.NET):
select Name, Firstname, Lastname, count(1)
from Pruebas
group by Name, Firstname, Lastname
having count(1) > 1
然后,在从游标返回的行上,执行您需要的任何操作:检查 FIN% 实例,检查 PersonalKey 是否存在,并进行相应更新。
对于游标上的每一行,你可以打开一个不同的游标:
select *
from Pruebas
where Name = the_Name
and Firstname = the_Firstname
and Lastname = the_Lastname
现在,您将拥有一个内部游标,其中包含您要修改的所有行。如果它是您需要的,请保留它并使用您提到的 KEY 值更新它。否则,删除它。
在 Oracle 中,您可以在一个查询中完成您想要的,但我认为您不会获得与使用此方法相同的性能。
希望对您有所帮助。
关于sql - MySQL重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667035/