度量快速开发平台-专业、快速的软件定制快开平台
标题:
SQL查询重复数据和清除重复数据(二)
[打印本页]
作者:
万望
时间:
2020-4-19 23:45
标题:
SQL查询重复数据和清除重复数据(二)
本帖最后由 万望 于 2016-5-19 23:48 编辑
2.jpg
(4.88 KB, 下载次数: 91)
下载附件
保存到相册
2020-4-19 23:42 上传
过滤掉所有多余的重复记录
(
1
)我们知道distinct、
group
by
可以过滤重复,于是就有最直观的
select
distinct
*
from
emp 或
select
name,age
from
emp
group
by
name,age
获得需要的数据,如果可以使用临时表就有解法:
select
distinct
*
into
#tmp
from
emp
delete
from
emp
insert
into
emp
select
*
from
#tmp
(
2
)但是如果不可以使用临时表,那该怎么办?
我们观察到我们没办法区分数据(物理位置不一样,对 SQL Server来说没有任何区别),思路自然是想办法把数据区分出来了,既然现在的所有的列都没办法区分数据,唯一的办法就是再加个列让它区分出来,加什么列好?最佳选择是identity列:
alter
table
emp
add
chk
int
identity
(
1
,
1
)
例表:
name age chk
Tom
16
1
Sun
14
2
Tom
16
3
Tom
16
4
重复记录可以表示为:
select
*
from
emp
where
(
select
count
(
*
)
from
emp e
where
e.name
=
emp.name)
>
1
要删除的是:
delete
from
emp
where
(
select
count
(
*
)
from
emp e
where
e.name
=
emp.name
and
e.chk
>=
emp.chk)
>
1
再把添加的列删掉,出现结果。
alter
table
emp
drop
column
chk
(
3
)另一个思路:
视图
select
min
(chk)
from
emp
group
by
name
having
count
(
*
)
>
1
获得有重复的记录chk最小的值,于是可以
delete
from
emp
where
chk
not
in
(
select
min
(chk)
from
emp
group
by
name)
作者:
万望
时间:
2020-4-19 23:56
作者:
万望
时间:
2020-4-22 23:37
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/)
Powered by Discuz! X3.2