前期准备
创建测试表
create table salary(
staffid int,
staff varchar(15)
);
模拟重复数据
insert into salary values(1,‘a’);
insert into salary values(2,‘s’);
insert into salary values(3,‘ert’);
insert into salary values(4,‘d’);
insert into salary values(5,‘b’);
insert into salary values(1,‘a’);
insert into salary values(2,‘s’);
insert into salary values(3,‘ert’);
insert into salary values(4,‘d’);
insert into salary values(5,‘b’);
insert into salary values(1,‘a’);
insert into salary values(2,‘s’);
insert into salary values(3,‘ert’);
insert into salary values(4,‘d’);
insert into salary values(5,‘b’);
insert into salary values(10,‘aaaa’);
insert into salary values(20,‘sass’);
insert into salary values(30,‘erwt’);
insert into salary values(40,‘dsd’);
insert into salary values(50,‘bsdf’);
insert into salary values(1,‘oookkk’);
实验一:模拟单个字段数据重复
select * from salary;
STAFFID STAFF
1 oookkk
1 a
2 s
3 ert
4 d
5 b
1 a
2 s
3 ert
4 d
5 b
1 a
2 s
3 ert
4 d
5 b
10 aaaa
20 sass
30 erwt
40 dsd
50 bsdf
21 rows selected
1.查出重复数据
方法一
SELECT *
FROM salary a
WHERE ((SELECT COUNT(*)
FROM salary
WHERE staffid = a.staffid) > 1)
ORDER BY staffid
方法二
select *
from salary
where staffid in
(select staffid from salary group by staffid having count(staffid) > 1)
删除重复数据,只保留1条,其余全部删除
方法一,通过rowid删除
delete from salary
where staffid in (select staffid from salary group by staffid having count(staffid) > 1)
and rowid not in (select min(rowid) from salary group by staffid having count(staffid )>1)
实验二:模拟两个个字段数据重复
1.查询重复记录
方法一
select * from salary a
where (a.staffid,a.staff) in (select staffid,staff from salary group by staffid,staff having count(*) > 1)
方法二
SELECT *
FROM salary a
WHERE ((SELECT COUNT(*)
FROM salary
WHERE staffid = a.staffid and staff=a.staff) > 1)
ORDER BY staffid
结果,共15条
STAFFID
STAFF
1
a
1
a
1
a
2
s
2
s
2
s
3
ert
3
ert
3
ert
4
d
4
d
4
d
5
b
5
b
5
b
2.删除重复数据,只保留1条,其余全部删除
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
3.查看删除后结果
select * from salary;
结果
STAFFID
STAFF
1
oookkk
1
a
2
s
3
ert
4
d
5
b
10
aaaa
20
sass
30
erwt
40
dsd
50
bsdf
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26964624/viewspace-2564339/