我有一张表,上面有一些重复的信息:id,name,lastname,birth,personalkey,personal info,direction,source。
哪里的消息来源告诉我信息从哪里来。
重复的信息有唯一的id,我需要删除被欺骗的信息。
但是,我有优先权的一些来源信息,我需要一个留下来,另一个删除。
另一件事是,另一个源信息有一些信息,我想留下的那个没有,所以我需要补充的个人钥匙,一个,将要留下和删除重复的。
名为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值(我不想丢失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
现在,您将拥有一个内部游标,其中包含要修改的所有行。如果它是你需要的,保存它并用你提到的键值更新它。否则,删除它。
在Oracle中,您可以在一个查询中完成所需的任务,但我不认为这样您将获得与使用此方法相同的性能。
希望有帮助。