sql - MySQL重复行

标签 sql mysql

我有一个包含一些重复信息的表格: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/

相关文章:

sql - 查找任何 3 个公共(public)属性的重复记录

MySQL Trigger 语法错误 unexpected end of input

mysql - 当我执行 'lock tables [table_name] write' 时出现“元数据锁”

java - HQL 在 executeUpdate 上生成不完整的 'cross join'

php - 上传的图像未正确存储在数据库中(php mysql)

sql - 带 in 子句的查询中的参数?

sql - 删除文本 blob 中的空行

mysql - 如何在我的查询中显示零计数?

php - 插入到两个具有相关键的不同表中

php - 将内容动态翻译成不同语言的最佳实践