最近温习了一下如何在SQL中删除复生记录,感觉挺有趣。现将自己总结的几条方法归纳如下:
“重复记录”有两种意义,一种是表中的所有记录完全复复,(即表中的字段均重复),一种是表中的个别字段重复
1,对第一种重复,比较好解决
SELECT DISTINCT * FROM TABLENAME
可以复到无重复的记录
如果要删除多余的重复记录(只保留重复记录的一条记录),可以按下列方法操作
SELECT DISTINCT * INTO #TEMP FROM TABLENAME
DROP TABLE TABLENAME
SELECT * INTO TABLENAME FROM #TEMP
DROP TABLE #TEMP
出现这种问题是因为表的设计不周完,增加唯一性索引即可
2,个别字段的重复,如下
ID NAME VALUE
1 A PP
2 A PP
3 B II
4 B PP
5 B PP
6 C PP
7 C PP
8 C II
想要得到这样的结果
ID NAME VALUE
1 A PP
3 B II
4 B PP
6 C PP
8 C II
方法1
DELETE TABLENAME WHERE ID NOT IN
(SELECT MAX(ID) FROM TABLENAME GROUP BY NAME,VALUE HAVING COUNT(*)>1)
方法2
DELETE A FROM TABLENAME A LEFT JOIN
(SELECT ID=MIN(ID) FROM TABLENAME GROUP BY NAME,VALUE ) B ON A.ID=B.ID WHERE B.ID IS NULL
后续如有更好的例子,继续添加.........
“重复记录”有两种意义,一种是表中的所有记录完全复复,(即表中的字段均重复),一种是表中的个别字段重复
1,对第一种重复,比较好解决
SELECT DISTINCT * FROM TABLENAME
可以复到无重复的记录
如果要删除多余的重复记录(只保留重复记录的一条记录),可以按下列方法操作
SELECT DISTINCT * INTO #TEMP FROM TABLENAME
DROP TABLE TABLENAME
SELECT * INTO TABLENAME FROM #TEMP
DROP TABLE #TEMP
出现这种问题是因为表的设计不周完,增加唯一性索引即可
2,个别字段的重复,如下
ID NAME VALUE
1 A PP
2 A PP
3 B II
4 B PP
5 B PP
6 C PP
7 C PP
8 C II
想要得到这样的结果
ID NAME VALUE
1 A PP
3 B II
4 B PP
6 C PP
8 C II
方法1
DELETE TABLENAME WHERE ID NOT IN
(SELECT MAX(ID) FROM TABLENAME GROUP BY NAME,VALUE HAVING COUNT(*)>1)
方法2
DELETE A FROM TABLENAME A LEFT JOIN
(SELECT ID=MIN(ID) FROM TABLENAME GROUP BY NAME,VALUE ) B ON A.ID=B.ID WHERE B.ID IS NULL
后续如有更好的例子,继续添加.........
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1342http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 703创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 683SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 420--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 537在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 584大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1732昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1626在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9686① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 754--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 837view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 7511、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1044本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 896数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1158对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6632--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2337PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 1032APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1393--======================== ... -
Not Exists练习
2012-07-23 14:40 894IF OBJECT_ID(N'a') IS NOT NU ...
相关推荐
以上介绍了多种使用SQL删除重复记录的方法,每种方法都有其适用场景和特点。在选择具体方法时,需要考虑数据库的类型、数据量大小以及性能要求等因素。通过合理选择合适的方法,可以有效提高数据清理的效率和准确性...
在SQL中删除重复记录是一个常见的需求,特别是在处理大型数据集时。本文将介绍几种有效的方法,以帮助你在遇到重复记录问题时能有效地清理数据。我们将以Oracle数据库为例,但这些方法在其他SQL数据库系统中也具有...
本文总结了四种删除重复记录的方法,每种方法都有其优缺点。 方法一:通过创建临时表 这种方法可以实现删除重复记录,但是它的效率非常低,特别是在大型数据表中。创建临时表,导入数据,然后删除原表的数据,再将...
总结一下,SQL Server中删除重复数据通常涉及对数据进行分组,然后根据分组的结果选择保留或删除。在本例中,我们利用窗口函数ROW_NUMBER()进行分组并排序,确保在每个重复组中只保留一个记录。这种方法在处理大数据...
- **SQL0121N:** 表示同一SQL语句中相同变量重复赋值。 - **SQL0122N:** 表示`SELECT`语句中缺少`GROUP BY`子句。 - **SQL0123N:** 表示表达式中缺少操作符。 - **SQL0125N:** 表示`ORDER BY`子句中缺少有效的排序键...
不同数据库系统中随机读取记录的方法有所不同: - **Access**:`SELECT top 10 * From 表名 ORDER BY Rnd(id)` - **SQL Server**:`SELECT top n * from 表名 ORDER BY NEWID()` - **MySQL**:`SELECT * From 表名 ...
Minus运算符可以用来删除重复的记录,我们可以使用它来删除前面的记录,从而实现分页查询。 例如,以下SQL语句可以查询表t_table_name的第11-20条记录: ```sql SELECT t_col1,t_col2 FROM t_table_name WHERE ...
删除表中的记录可以用以下命令: ```sql DELETE FROM 课程 WHERE 课程号 = 1; ``` #### 8. 数据查询 (SELECT) - **8.1 Select命令各子句执行顺序** SELECT命令的执行顺序通常为FROM -> WHERE -> GROUP BY -...
│ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级...
在SQL世界中,动态SQL(Dynamic SQL)是一种强大的技术,特别是在复杂的数据库操作和程序设计中。在Microsoft SQL Server(MSSQL)环境下,掌握动态SQL的基本语法是提升SQL编程能力的关键。下面,我们将深入探讨动态...
19. **删除重复记录**: - 删除所有非最小ID的重复记录,可以使用子查询和`NOT IN`。 以上是SQL面试中可能遇到的一些高级问题和解答,涵盖了表操作、查询优化、联接、聚合函数、分页、子查询等多个方面,对于理解...
- 删除表中的所有记录。 ```sql DELETE FROM Students; ``` #### 查询 1. **查询全部的行和列**: - 选择表中的所有数据。 ```sql SELECT * FROM Students; ``` 2. **查询部分行**: - 选择表中满足特定...
17. 删除重复记录:删除重复记录通常涉及使用`GROUP BY`和`HAVING`子句,或者通过自连接和`DISTINCT`关键字来实现。 以上是SQL语句的一些常见用途和示例,它们在数据库管理、数据分析以及应用开发中扮演着重要角色...
- **BIGINT**:一种数据类型,用于存储大整数,在不同的SQL版本中有着一致的保留状态,但在PostgreSQL中是非保留的,这意味着它可以作为标识符使用,但不推荐这样做。 #### C系列关键字 - **CACHE**:在不同SQL...
数据记录筛选是SQL中最常用的查询方式之一,主要包括以下几种方法: 1. **基础查询**: ```sql SELECT * FROM 数据表 WHERE 字段名 = 字段值 ORDER BY 字段名 [DESC] ``` - **功能**:选择表中满足指定条件的...
SELECT语句可以实现从指定表或视图中选取数据、去除重复记录(DISTINCT)、连接多个表(UNION)、选取前N条记录(TOP)等功能。 **9. 使用GROUP BY进行分组时,可配合哪些聚合函数使用:** - **A:** ORDER BY, ...
4.16删除重复记录 4.17删除从其他表引用的记录 第5章 元数据查询 第6章 使用字符串 第7章 使用数字 第8章 日期运算 第9章 日期操作 第10章 范围处理 第11章 高级查找 第12章 报表和数据仓库运算 第...
- **TRUNCATETABLE 是一种快速、无日志记录的方法删除所有行** - 用于快速删除表中的所有行。 - **NOTEXISTS 子查询不返回行** - 用于检查子查询是否没有返回任何行。 - **INNERJOIN….ON.. 内联连接** - ...
插入新记录有两种方式,指定字段名或不指定: ```sql INSERT INTO 数据表 (字段1, 字段2, ...) VALUES (值1, 值2, ...); INSERT INTO 数据表 VALUES (值1, 值2, ...); ``` 9. **更新数据**: 更新记录使用`...
- 删除名称重复的记录:结合窗口函数或自关联删除重复项。 5. 使用字符串 - 遍历字符串:利用数据库函数逐个处理字符串中的字符。 - 字符串文字中包含引号:使用转义字符处理引号。 - 计算字符在字符串中出现的...