SQL查询和删除重复字段的内容
--例如:
id NAME VALUE
1 a pp
2 a pp
3 b iii
4 b pp
5 b pp
6 c pp
7 c pp
8 c iii
--id是主键
--要求得到这样的结果
id NAME VALUE
1 a pp
3 b iii
4 b pp
6 c pp
8 c iii --方法1
DELETE YourTable
WHERE [id] NOT IN (SELECT MAX([id])
FROM YourTable
GROUP BY
(NAME + VALUE)) --方法2 DELETE a
FROM 表 a
LEFT JOIN (
SELECT id = MIN(id)
FROM 表
GROUP BY
NAME,
VALUE
)b
ON a.id = b.id
WHERE b.id IS NULL --查询及删除重复记录的SQL语句
--查询及删除重复记录的SQL语句
--1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT *
FROM people
WHERE peopleId IN (SELECT peopleId
FROM people
GROUP BY
peopleId
HAVING COUNT(peopleId) > 1)
--2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 DELETE
FROM people
WHERE peopleId IN (SELECT peopleId
FROM people
GROUP BY
peopleId
HAVING COUNT(peopleId) > 1)
AND rowid NOT IN (SELECT MIN(rowid)
FROM people
GROUP BY
peopleId
HAVING COUNT(peopleId) > 1)
--3、查找表中多余的重复记录(多个字段) SELECT *
FROM vitae a
WHERE (a.peopleId, a.seq) IN (SELECT peopleId,
seq
FROM vitae
GROUP BY
peopleId,
seq
HAVING COUNT(*) > 1)
--4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 DELETE
FROM vitae a
WHERE (a.peopleId, a.seq) IN (SELECT peopleId,
seq
FROM vitae
GROUP BY
peopleId,
seq
HAVING COUNT(*) > 1)
AND rowid NOT IN (SELECT MIN(rowid)
FROM vitae
GROUP BY
peopleId,
seq
HAVING COUNT(*) > 1) --5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 SELECT *
FROM vitae a
WHERE (a.peopleId, a.seq) IN (SELECT peopleId,
seq
FROM vitae
GROUP BY
peopleId,
seq
HAVING COUNT(*) > 1)
AND rowid NOT IN (SELECT MIN(rowid)
FROM vitae
GROUP BY
peopleId,
seq
HAVING COUNT(*) > 1)
--(二)
--比方说
--在A表中存在一个字段“name”,
--而且不同记录之间的“name”值有可能会相同,
--现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项; SELECT NAME,
COUNT(*)
FROM A
GROUP BY
NAME
HAVING COUNT(*) > 1 --如果还查性别也相同大则如下: SELECT NAME,
sex,
COUNT(*)
FROM A
GROUP BY
NAME,
sex
HAVING COUNT(*) > 1(三)
--方法一 DECLARE @max integer,
@id integer DECLARE cur_rows CURSOR LOCAL
FOR
SELECT 主字段,
COUNT(*)
FROM 表名
GROUP BY
主字段
HAVING COUNT(*) > ; 1 OPEN cur_rows
FETCH cur_rows INTO @id,@max
WHILE @@fetch_status = 0
BEGIN
SELECT @max = @max -1
SET ROWCOUNT @max
DELETE
FROM 表名
WHERE 主字段 = @id FETCH cur_rows INTO @id,@max
END
CLOSE cur_rows
SET ROWCOUNT 0 --方法二
--"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
--1、对于第一种重复,比较容易解决,使用 SELECT DISTINCT *
FROM tableName
--就可以得到无重复记录的结果集。
--如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 SELECT DISTINCT * INTO #Tmp
FROM tableName DROP TABLE tableName
SELECT * INTO tableName
FROM #Tmp DROP TABLE #Tmp
--发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
--2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
--假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
SELECT IDENTITY(INT, 1, 1) AS autoID,
* INTO #Tmp
FROM tableName SELECT MIN(autoID) AS autoID INTO #Tmp2
FROM #Tmp
GROUP BY
NAME,
autoID SELECT *
FROM #Tmp
WHERE autoID IN (SELECT autoID
FROM #tmp2)
--最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)(四)
--查询重复 SELECT *
FROM tablename
WHERE id IN (SELECT id
FROM tablename
GROUP BY
id
HAVING COUNT(id) > 1)
SQL查询和删除重复字段的内容的更多相关文章
- [SQL]查询及删除重复记录的SQL语句
一:查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ...
- Oracle 查询并删除重复记录的SQL语句
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ...
- oracle 查询及删除重复记录的SQL语句
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group ...
- SQL语句添加删除修改字段及一些表与字段的基本操作
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200)2.删除字段 ALTER TABLE table_NA ...
- oracle_SQL 实验查询及删除重复记录 依据条件 (row)
除数据库表中的重复记录 根据条件 ① 创建表准备数据 创建表 tab_test -- Create table create table TAB_TEST ( ID NUMBER, NAME NVAR ...
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...
- SQL语句添加删除修改字段[sql server 2000/2005]
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
- SQL语句添加删除修改字段
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
- MySQL查询及删除重复记录的方法
查询及删除重复记录的方法(一)1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select p ...
随机推荐
- angularjs-1.3代码学习-$parse
这次我们来看一下angular的Sandboxing Angular Expressions.关于内置方法的,核心有两块:Lexer和Parser.其中大家对$parse可能更了解一点.好了不多废话, ...
- Java中死锁的简单例子及其避免
死锁:当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么它们将永远被阻塞.比如,线程1已经持有了A锁并想要获得B锁的同时,线程2持有B锁并尝试获取A锁,那么这两个线程将永远地等待下去. ...
- 结对编程1-四则运算(基于GUI)
林晓芳201421123092.陈惠201421123096 coding 地址:https://git.coding.net/lianlian/92.96.1.git 一.题目描述 我们在个人作业1 ...
- 201521123113 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. -继承设计的技巧 1.将公共操作和属性放在父类 2.不要使用protected修 ...
- 201521123007《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123007《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- IDEA导入Eclipse项目 【未结束的注释、非法类型的开始、缺少符号】
如果我们导入Eclipse项目的使用出现了未结束的注释.非法类型的开始.缺少符号这么一些编译时期的错误,而我们的代码明明看起来就是正常的-. 我们去检查一下是否编码的问题:把FileEncoding全 ...
- [05] 利用private来封装
我们知道,面向对象开发的三大特点是:封装性.继承性.多态性 所谓封装性,实际上是表达了一种信息隐藏.从表面上来阐述,就是使用private修饰符来对属性或者方法进行信息隐藏,而使用public的方法控 ...
- Eclipse读取含有extjs的项目文件时卡死或者编写ExtJS时卡
新建一个Eclipse或MyEclipse项目时,关掉验证. 项目右键-->Properties-->Builders--> 不勾选(JavaScript Validator.Val ...
- 参加Java培训你必须知道的五点真相!
相信大家都有过到招聘网站投简历.找工作的经历.当一份份简历发出三天后,左等右等连一个电话没有等来,心中不免有些失落,有些焦虑.这个时侯,很多培训机构就会纷纷给你打电话以各种名义让你参加各种IT技能培训 ...