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 ...
随机推荐
- python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸
ACG-wallpaper 初学python,之前想抓取P站的一些图片来着,然后发现acg12这里有专门的壁纸榜单,就写了个抓取壁纸作为mac桌面壁纸玩玩. 功能:抓取acg12壁纸榜单的动漫壁纸,并 ...
- 网络传输编程之TCP
网络传输编程之TCP 网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议 ...
- 新CCIE笔记-路由器的配置
CCIE重修笔记之路由器基本配置与最简单的路由. 路由器与交换机的基本配置命令 全局配置模式下有多种子模式 (华为可以跳跃切换模式) 思科命令行技巧 Tab键补全,也可以直接保留缩写 问号'?'类似l ...
- NullpointerException处理
毫无疑问,空指针NullpointerException是我们最常遇到异常,没有之一! 在刚进入编程职业时,我想,大部分刚进入的同学肯定会受到前辈们的叮咛:一定要防止空指针,这是个低级错误.你们不是? ...
- 轻谈 return i++
在写函数的时候,发现了又一个很有意思的事情 先上代码 public class Test{ static int number = 2; public static void main(String ...
- JAVA基础第九组(5道题)
41.[程序41] 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一 个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了 ...
- 团队作业10——复审和事后分析(Beta版本)
团队作业10--事后分析(Beta版本) http://www.cnblogs.com/newteam6/p/6953992.html 团队作业10--复审(Beta版本) http://www.cn ...
- 201521123098 《Java程序设计》第3周学习总结
1. 本周学习总结 1. 学习了类的创建: 2. 学会利用快捷方式完成变量的getter和setter的设定: 3. 学会了静态变量和非静态变量的区别和定义: 4. 学习了构造函数的基本编写方法. 大 ...
- Python内置函数详解
置顶 内置函数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii https://docs.pyth ...
- AJAX多级下拉联动【JSON】
前言 前面我们已经使用过了XML作为数据载体在AJAX中与服务器进行交互.当时候我们的案例是二级联动,使用Servlet进行控制 这次我们使用JSON作为数据载体在AJAX与服务器交互,使用三级联动, ...