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 ...
随机推荐
- Linux — 用户组、权限
Linux 用户组分为:所有者.所在组.其他组 所有者:谁创建,谁是所有者.命令:ls -al 所在组:当创建文件或者文件夹时,这个文件或者文件夹所分配到的用户组,这样就会有效地隔离文件. 其他组:和 ...
- JavaScript学习日志(一):变量,作用域和内存问题
一,变量分为两种类型:基本类型值和引用类型值,基本类型包括:Undefined, String, Boolean, Null, Number,我们无法给基本类型值添加属性: 二,复制变量值的时候,如果 ...
- Flask05 cookie
1 什么是cookie 就是网站存放到你浏览器中的一部分固定内容:当你下次访问我这个网站的时候,你会把之前我存放到你浏览器中的数据带回来给我 你要先登录(用户名.密码) -> ...
- 集美大学网络1413第七次作业成绩(团队三) --需求改进&系统设计
题目 团队作业3--需求改进&系统设计 团队作业3成绩 团队/分值 TD BZ GJ CJ SI WBS GS JG DB SS SJ CS DC 总分 1 0.25 0.75 1 0.5 ...
- 团队作业4——第一次项目冲刺 tHe LaSt dAy
项目冲刺--终点 敏捷冲刺最后一天,没想到前一天就上榜了,我也很无奈啊. 那今天就老老实实写一篇博客好了. Mission 这次敏捷冲刺呢,我们主要做了前端页面,后台的数据库和添加了基本的增删查改的功 ...
- 团队作业8——Beta 阶段冲刺4th day
团队作业8--Beta 阶段冲刺4rd day 一.当天站立式会议 二.每个人的工作 (1)昨天已完成的工作(具体在表格中) 添加了支付功能,并且对支付功能进行了测试 (2)今天计划完成的工作(具 ...
- 第03周-Java作业评价
1.作业存在的问题 几大扣分点: 思维导图敷衍了事 -1 代码格式混乱 -2 无码云提交记录 -2 无PTA实验总结 -2 部分题目未完成. 格式问题:到现在还搞不清楚的,主要是态度问题.相关的教程 ...
- 201521123064 《Java程序设计》第4周学习总结
1. 本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. ① 以上周PTA实验"形状"为例,Circle类和Rectangle类中 ...
- 201521123027 《JAVA程序设计》第四周学习总结
1.本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. ①多态:相同方法名,不同实现: ②instanceof运算符:判断父类引用所引用的对象实例的实 ...
- 201521123072《java程序设计》第十一周学习总结
201521123072<java程序设计>第十一周学习总结 1. 本周学习总结 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问 ...