对于java中如何去除重复的数据
2016-07-31 14:03
369 查看
场景:
a)假设现在数据库中有一个人员表(user),表中包括 主键ID,,姓名、身份证号码、等字段。
b) 由于程序的的原因、好来发现表中有许多理论上重复的数据(即姓名、和身份证号相同的数据), 现在需求是把这些重复的数据给删掉。
思路:
1) 通过 姓名和身份证号分组的sql去掉重复的数据。select Max(ID) as Id,姓名,身份证号 from User group by 姓名,身份证号, 得到得到一份没有重复姓名和身份证号的一组数据
2)我们只要得到没有重复数据的id就可以找出所有的并且不重复的数据了,使用嵌套的查询 得到所有的不重复数据的Id
select Id from (select Max(ID) as Id,姓名,身份证号 from User group by 姓名,身份证号) as t 3)然后使用临时表, 将不重复的数据放到临时表。 删除正式表的所有的数据, 然后将临时表的数据插入到正式表, 最后删除临时表。
a找出所有不重复的数据
select * into #temp1 from user where id in (select Id from (select Max(ID) as Id,姓名,身份证号 from User group by 姓名,身份证号) as t );
b,删除原表中的所有数据
delete from user;
c、将临时表中的数据在插入会user表
insert into user select * from #temp1;
d,删除临时表
drop #temp1;
关键点:
这里的关键是根据需要判断是否重复的字段分组后、使用聚合函数Max 或者Min得到唯一的ID,这一点十分重要。
具体的sql实现:
1.取出要留下的数据,本次依据重复项的最大id为保留项。
SELECT id,name,age from person
WHERE id in(
SELECT MAX(id) from person GROUP BY name,age
);
2.放入临时表
3.清空原表并从临时表注入
当然也可以直接delete:
DELETE from person WHERE id not in (
SELECT mid FROM(
SELECT MAX(id) mid from person GROUP BY name,age
) t
)
So do it,and change it,no regret!
a)假设现在数据库中有一个人员表(user),表中包括 主键ID,,姓名、身份证号码、等字段。
b) 由于程序的的原因、好来发现表中有许多理论上重复的数据(即姓名、和身份证号相同的数据), 现在需求是把这些重复的数据给删掉。
思路:
1) 通过 姓名和身份证号分组的sql去掉重复的数据。select Max(ID) as Id,姓名,身份证号 from User group by 姓名,身份证号, 得到得到一份没有重复姓名和身份证号的一组数据
2)我们只要得到没有重复数据的id就可以找出所有的并且不重复的数据了,使用嵌套的查询 得到所有的不重复数据的Id
select Id from (select Max(ID) as Id,姓名,身份证号 from User group by 姓名,身份证号) as t 3)然后使用临时表, 将不重复的数据放到临时表。 删除正式表的所有的数据, 然后将临时表的数据插入到正式表, 最后删除临时表。
a找出所有不重复的数据
select * into #temp1 from user where id in (select Id from (select Max(ID) as Id,姓名,身份证号 from User group by 姓名,身份证号) as t );
b,删除原表中的所有数据
delete from user;
c、将临时表中的数据在插入会user表
insert into user select * from #temp1;
d,删除临时表
drop #temp1;
关键点:
这里的关键是根据需要判断是否重复的字段分组后、使用聚合函数Max 或者Min得到唯一的ID,这一点十分重要。
具体的sql实现:
1.取出要留下的数据,本次依据重复项的最大id为保留项。
SELECT id,name,age from person
WHERE id in(
SELECT MAX(id) from person GROUP BY name,age
);
2.放入临时表
<pre name="code" class="sql">DROP TABLE IF EXISTS temp1; CREATE TEMPORARY TABLE temp1 SELECT id,name,age from person WHERE id in( SELECT MAX(id) from person GROUP BY name,age );
3.清空原表并从临时表注入
TRUNCATE person; INSERT INTO person SELECT * from temp1; DROP TABLE if EXISTS temp1; SELECT * from person;
当然也可以直接delete:
DELETE from person WHERE id not in (
SELECT mid FROM(
SELECT MAX(id) mid from person GROUP BY name,age
) t
)
So do it,and change it,no regret!
相关文章推荐
- SQL如何去除数据表中重复的数据
- java中重复数据的去除
- java 去除jsonarray里面jsonarray的重复和合并数据
- java数组去除重复数据
- Java中List集合去除重复数据的方法
- java 如何判断导入表格某列是否有重复数据
- JAVA数组去除重复数据
- 如何去除重复数据?
- 如何去除数据表中的重复数据
- java 去除数组重复数据,并输出重复数据值
- 如何在查询数据库时去除重复的数据
- java中去除List集合中重复数据的方法
- java 中的经典算法 如何将有序数据打散,以及在数组中取数据如何做到结果不重复。
- Java 如何判断导入表格某列是否有重复数据
- java如何读取Excel并存入list中时去除重复记录
- java list 去除重复数据
- java 去除数组重复数据,并输出重复数据值
- 如何通过mysql去除重复数据呢
- SQL如何去除数据表中重复的数据
- (Java 功能代码)java去除List中重复数据之Object对象