删除重复记录

本文介绍了一种使用SQL从表中筛选唯一记录的方法。通过对比QQ号、邮箱和电话号码等字段,并结合时间戳进行筛选,确保了每个组合的唯一性。此方法适用于需要去除重复数据并保留最新记录的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表如下:
id qq email tel time
01 11 d@d.c 256 17:0
02 11 c@c.c 256 18:0
03 12 d@d.c 356 19:0
04 12 d@d.c 356 19:0
05 11 d@d.c 356 19:0
06 11 d@d.c 356 19:0
07 11 d@d.c 356 19:0
08 10 t@t.t 888 23:0
09 19 q@q.q 999 11:0
查询结果为:
01 11 d@d.c 256 17:0
08 10 t@t.t 888 23:0
09 19 q@q.q 999 11:0

Create table T(id int,qq int,email varchar(10),tel int,time varchar(10))
insert into T
select 1, 11, 'd@d.c', 256, '17:0'
union all select 2, 11, 'c@c.c', 256, '18:0'
union all select 3, 12, 'd@d.c', 356, '19:0'
union all select 4, 12, 'd@d.c', 356, '19:0'
union all select 5, 11, 'd@d.c', 356, '19:0'
union all select 6, 11, 'd@d.c', 356, '19:0'
union all select 7, 11, 'd@d.c', 356, '19:0'
union all select 8, 10, 't@t.t', 888, '23:0'
union all select 9, 19, 'q@q.q', 999, '11:0'
GO

select *
from T as A
where not exists(select 1 from T
where (qq=A.qq
or email=A.email
or tel=A.tel
)
and id<A.id)

/*
id qq email tel time
----------- ----------- ---------- ----------- ----------
1 11 d@d.c 256 17:0
8 10 t@t.t 888 23:0
9 19 q@q.q 999 11:0
*/

Drop table T
---------------------------------

DECLARE @TB TABLE(id VARCHAR(2), qq INT, email VARCHAR(5), tel INT, time VARCHAR(4))
INSERT @TB
SELECT '01', 11, 'd@d.c', 256, '17:0' UNION ALL
SELECT '02', 11, 'c@c.c', 256, '18:0' UNION ALL
SELECT '03', 12, 'd@d.c', 356, '19:0' UNION ALL
SELECT '04', 12, 'd@d.c', 356, '19:0' UNION ALL
SELECT '05', 11, 'd@d.c', 356, '19:0' UNION ALL
SELECT '06', 11, 'd@d.c', 356, '19:0' UNION ALL
SELECT '07', 11, 'd@d.c', 356, '19:0' UNION ALL
SELECT '08', 10, 't@t.t', 888, '23:0' UNION ALL
SELECT '09', 19, 'q@q.q', 999, '11:0'

SELECT * FROM @TB T
WHERE (NOT EXISTS(SELECT 1 FROM @TB WHERE qq=T.qq AND time<T.time))
AND (NOT EXISTS(SELECT 1 FROM @TB WHERE email=T.email AND time<T.time))
AND (NOT EXISTS(SELECT 1 FROM @TB WHERE tel=T.tel AND time<T.time))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值