2条完全一样的数据删除一条保留一条,用SQL语句删除。
来源:互联网 发布:比特币源码编译成exe 编辑:程序博客网 时间:2024/05/17 00:01
SQL Server 的处理办法
-- 首先创建测试表
CREATE TABLE test_delete(
name varchar(10),
value INT
);
go
-- 测试数据,其中 张三100 与 王五80 是完全一样的
INSERT INTO test_delete
SELECT '张三', 100
UNION ALL SELECT '张三', 100
UNION ALL SELECT '李四', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '赵六', 90
UNION ALL SELECT '赵六', 70
go
-- 首先查询一下, ROW_NUMBER 效果是否满足预期
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete
no name value
----- ---------- -----------
1 李四 80
1 王五 80
2 王五 80
1 张三 100
2 张三 100
1 赵六 70
1 赵六 90
从结果上可以看到,如果有重复的,完全一样的话, no 是有大于1的。
-- 创建视图
CREATE VIEW tmp_view AS
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete
-- 删除 视图中的 no 不等于 1 的数据。
1> DELETE FROM tmp_view WHERE no != 1
2> go
(2 行受影响)
1>
2> select * from test_delete;
3> go
name value
---------- -----------
张三 100
李四 80
王五 80
赵六 90
赵六 70
(5 行受影响)
结果看上去是满足预期的。
Oracle 的处理办法
使用 Oracle 的 ROWID 来删除的处理步骤如下:
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
2 test_delete
3 WHERE
4 (name, value)
5 IN (SELECT
6 name, value
7 FROM
8 test_delete
9 GROUP BY
10 name, value
11 HAVING COUNT(1) > 1)
12 AND rowid NOT IN
13 (SELECT
14 MIN(rowid)
15 FROM
16 test_delete
17 GROUP BY
18 name, value
19 HAVING
20 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
转自http://hi.baidu.com/wangzhiqing999/item/257cc01792e536afffded529?qq-pf-to=pcqq.discussion
- 2条完全一样的数据删除一条保留一条,用SQL语句删除。
- 【SQL】2条完全一样的数据删除一条保留一条
- SQL语句删除2条重复数据一条保留一条
- 删除完全一样的重复数据, 保留其中一条
- SQL删除重复数据只保留一条语句
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- SQL删除重复数据只保留一条
- Action的Result类型
- hibernate 错误:Provided id of the wrong type for class com.lhaix.pojo.Test. Expected: class java.la
- 自定义定时器
- linux给用户添加sudo权限
- 脚本引发的思考
- 2条完全一样的数据删除一条保留一条,用SQL语句删除。
- 基于STK的空间站星载GPS接收机仿真分析
- 用线程实现定时器功能
- 第十周上机实践 求1/3-3/5+5/7-7/9......-19/21
- Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置
- H.264 NAL层解析(0x00000001,编码,打包,NALU)
- <Pointers on C> Chapter 2
- sar 查看看qps 和rt
- I,P,B帧和PTS,DTS的关系,GOP相关