删除重复数据只保存一条--ms sql及oracle实现方法

本文介绍如何使用SQL在MSSQL和Oracle数据库中批量删除重复记录的方法。通过创建临时表并插入示例数据,然后利用子查询和聚合函数确定哪些重复记录保留,最终实现去除重复项的功能。

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

ms sql方法:

declare @sss table (ID int,  Name varchar(10), address varchar(10))
insert into @sss select 1,'小王','重庆'
insert into @sss select 2,'小张','北京'
insert into @sss select 3,'小明','上海'
insert into @sss select 4,'小红','重庆'
insert into @sss select 5,'小李','重庆'
insert into @sss select 6,'小白','北京'
insert into @sss select 7,'小红','上海'
insert into @sss select 8,'小红','重庆'

delete from @sss where id not in(select min(id) from @sss group by name,address)

------------------------------------------------------------------------------------------------------------

oracle方法:

SQL> CREATE TABLE test_delete(
  2    name  varchar(10),
  3    value INT
  4  );
表已创建。

 

SQL> INSERT INTO test_delete
  2  SELECT '张三', 100 FROM dual
  3  UNION ALL SELECT '张三', 100 FROM dual
  4  UNION ALL SELECT '李四', 80  FROM dual
  5  UNION ALL SELECT '王五', 80  FROM dual
  6  UNION ALL SELECT '王五', 80  FROM dual
  7  UNION ALL SELECT '赵六', 90  FROM dual
  8  UNION ALL SELECT '赵六', 70  FROM dual;
已创建7行。

 

SQL> SELECT
  2    ROWID,
  3    name,
  4    value
  5  FROM
  6    test_delete;
ROWID              NAME            VALUE
------------------ ---------- ----------
AAAM2mAAGAAAAOXAAA 张三              100
AAAM2mAAGAAAAOXAAB 张三              100
AAAM2mAAGAAAAOXAAC 李四               80
AAAM2mAAGAAAAOXAAD 王五               80
AAAM2mAAGAAAAOXAAE 王五               80
AAAM2mAAGAAAAOXAAF 赵六               90
AAAM2mAAGAAAAOXAAG 赵六               70
已选择7行。

 

SQL> DELETE  test_delete  
WHERE (name, value) IN (SELECT name, value FROM test_delete GROUP BY name, value HAVING COUNT(1) > 1) 
AND rowid NOT IN (SELECT MIN(rowid) FROM test_delete GROUP BY name, value HAVING COUNT(1) > 1);

已删除2行。

SQL> SELECT
  2    ROWID,
  3    name,
  4    value
  5  FROM
  6    test_delete;

ROWID              NAME            VALUE
------------------ ---------- ----------
AAAM2mAAGAAAAOXAAA 张三              100
AAAM2mAAGAAAAOXAAC 李四               80
AAAM2mAAGAAAAOXAAD 王五               80
AAAM2mAAGAAAAOXAAF 赵六               90
AAAM2mAAGAAAAOXAAG 赵六               70

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值