删除重复数据只保存一条--ms sql及oracle实现方法
2012-07-05 13:55
731 查看
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
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
相关文章推荐
- Oracle删除重复记录只保留一条数据的几种方法
- 三种方法实现mysql字段重复记录删除,保存Id最小的一条
- 解决Oracle删除重复数据只留一条的方法详解
- 解决Oracle删除重复数据只留一条的方法详解
- Oracle删除重复记录只保留一条数据的几种方法
- Oracle删除重复记录只保留一条数据的几种方法
- Oracle删除重复记录只保留一条数据的几种方法
- Oracle 删除重复数据只留一条
- oracle 查询重复数据并且删除, 只保留一条数据
- oracle 删除掉重复数据只保留一条
- Oracle 删除重复数据只留一条
- Oracle 删除重复数据只留一条
- Oracle查询重复数据并删除,只保留一条记录
- Oracle 删除重复数据只留一条
- 删除oracle 表中重复数据sql语句、保留rowid最小的一条记录
- PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
- Oracle 删除重复数据只留一条
- Oracle 删除重复数据只留一条
- ORACLE删除重复数据的一种高效的方法
- oracle中判断某列是否为数字,删除重复数据的方法