sql删除重复的行
Ⅰ sql删除重复数据,只保留一行
在sql的使用中,我们总是碰到需要删弯棚滚除重复数据的情况,但是又不能全部删除完,必须要保留至少一个重复的数据。重复的记录根据两个字段 a2,a3 判断(实际使用中可以拓展为多个)
在上述的表中第三行和第四行重复,我们要选择一行删除,流程如下:
结果如下:
得到的结果如下:
|a1|a2|a3|
|---|---|
|3|2|2|
|4|2|2|
|6|2|2|
那么后面就很好办埋余了:
3.选出要删除的值:
结果是保留a1最小的值,其他选项全部选出,
请注意 此时并不是将Select 改为delete就可以了,如果你直接这样子改的话,会报如下错误:
该错误提示你,不能先select出和搏同一表中的某些值,再update这个表(在同一语句中)。所以要稍微修改一下。
结果如下:
|a1|a2|a3|
|---|---|
|1|1|1|
|2|1|2|
|3|2|2|
|5|3|3|
完毕
注:如果说不用保留一行数据的话那么就简单多了,只需要一个很简单的sql语句:
Ⅱ sql统计行数,但是需要去重中间的重复数据
userId: user id
url: url visited by the user
SELECT userId, COUNT(DISTINCTurl)
FROM tab
GROUP BY userId
ORDER BY COUNT(DISTINCTurl) DESC
(2)sql删除重复的行扩展阅读:
group by 解决重复数据的猛磨个数统计适用于各种关系型数据库,如oracle,SQL Server
查询重复的数据
select * from (select v.xh,count(v.xh) num from sms.vehicle v group by v.xh) where num>1;
select v.xh,count(v.xh) num from sms.vehicle v group by v.xh having count(v.xh)=2;
删除重复的数据
create table mayong as (select distinct* from sms.vehicle);
delete from sms.vehicle ;
insert into sms.vehicle select * from mayong;
在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,如果想保留最新的一条记录,就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。
下面是查询重复数据的一个例子:
select a.rowid,a.* from 表枝伏斗名厅启 a
where a.rowid != (select max(b.rowid) from 表名 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 )
Ⅲ SQL Server中怎样可以从SELECT语句的结果集中删除重复行
在要删除的有重复数据中存在几种情况:
1.存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉。
example: select distinct * from table(表名氏手) where (条件)
2.存在禅团部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
example:
select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])
3.没有唯一键ID
example:
select identity(int1,1) as id,* into newtable(临时表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])
(3)sql删除重复的行扩展阅读:
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等贺核橘多种平台使用。
Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
Ⅳ 详解如何删除SQL Server表中的重复行
如果表中有多组完全不同的重复的 PK 值 则逐个删除它们会很费时间 在这种情况下 可使用下面的方法
首先 运行上面的 GROUP BY 查询来确定有多少组重复的 PK 值及每组的重复数
选择重复的键值放入临时表中 例如
SELECT col col col =count(*) INTO holdkey FROM t GROUP BY col col HAVING count(*) >选择重复的行放入临时表中 以清除进程中的重复值 例如
SELECT DISTINCT t * INTO holdps FROM t holdkey WHERE t col = holdkey col AND t col = holdkey col拍掘 此时 holdps 表应有唯一的 PK;但是 如果 t 有重复的 PK 而行唯一(如上面的 SSN 示例) 情况就不是这样了 请验证 holdps 中的各个键是否唯一 是否没有键友旦重复而行唯一的情况 如果是这样 您必须停在该处 确定对于给定重复的键值 您希望保留哪些行 例如 以下查询
SELECT col col count(*) FROM holdps GROUP BY col col
应为各好贺扰行返回计数 如果结果是 请继续执行下面的步骤 如果不是 则存在键重复而行唯一的情况 且需要您决定要保存哪些行 通常 这将需要舍弃行或为此行创建新的唯一的键值 为 holdps 表中每个此种重复 PK 执行这两个步骤之一
从原始表中删除重复的行 例如
DELETE t FROM t holdkey WHERE t col = holdkey col AND t col = holdkey col将唯一行放回原始表中 例如
lishixin/Article/program/SQLServer/201311/22468
Ⅳ sql中如何删除一个表中重复的记录
sql中删除一个表中的重复记录可以采用如下步骤:
1、把a_dist表的记录用distinct去重,结果放到临时表中。
select distinct * into #temp from a_dist;
2、把a_dist表的记录全部删除。
delete from a_dist;
3、把临时表中的数据信息导进到a_dist表中,并删除临时表。
insert into a_distselect * from #temp;
drop table #temp;
(5)sql删除重复的行扩展阅读:
SQL (结构化查询语言)是用于执行查询的语法。在数据库上执行的大部分工作都由 SQL 语句完成。SQL 语言包含用于更新、插入和删除记录的语法。
增删改查指令构成了 SQL 的 DML 部分:
SELECT- 从数据库表中获取数据
UPDATE- 更新数据库表中的数据
DELETE- 从数据库表中删除数据
INSERT INTO- 向数据库表中插入数据
Ⅵ 在SQL中删除重复记录(多种方法)
学习sql有一段时间了 发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录 后来总结了一些删除重复记录的方法 在Oracle中 可以通过唯一rowid实现删除重复记录 还可以建临时表来实现 这个只提到其中的几种简单实用的方法 希望可以和大家分享(以表employee为例) SQL> desc employee NameNull?Type emp_idNUMBER( )emp_name VARCHAR ( )salaryNUMBER( )可以通过下面的语句查询重复的记录 SQL> select * from employee;EMP_ID EMP_NAMESALARY sunshine sunshine滑帆运 信梁 semon semon xyz semon SQL> select distinct * from employee;EMP_ID EMP_NAME SALARY sunshine semon xyz SQL>select * from employee group by emp_id emp_name salary having count (*)> EMP_ID EMP_NAME SALARY sunshine semon SQL> select * from employee e where rowid in (select max(rowid) from employe e where e emp_id=e emp_id ande emp_name=e emp_name and e salary=e salary);EMP_ID EMP_NAME SALARY sunshine xyz轿侍 semon 删除的几种方法 ( )通过建立临时表来实现SQL>create table temp_emp as (select distinct * from employee)SQL> truncate table employee; (清空employee表的数据)SQL> insert into employee select * from temp_emp;(再将临时表里的内容插回来)( )通过唯一rowid实现删除重复记录 在Oracle中 每一条记录都有一个rowid rowid在整个数据库中是唯一的 rowid确定了每条记录是在Oracle中的哪一个数据文件 块 行上 在重复的记录中 可能所有列的内容都相同 但rowid不会相同 所以只要确定出重复记录中那些具有最大或最小rowid的就可以了 其余全部删除 SQL>delete from employee e where rowid not in (select max(e rowid) from employee e wheree emp_id=e emp_id and e emp_name=e emp_name and e salary=e salary); 这里用min(rowid)也可以 SQL>delete from employee e where rowid <(select max(e rowid) from employee e wheree emp_id=e emp_id and e emp_name=e emp_name ande salary=e salary);( )也是通过rowid 但效率更高 SQL>delete from employee where rowid not in (select max(t rowid) from employee t group byt emp_id t emp_name t salary); 这里用min(rowid)也可以 EMP_ID EMP_NAME SALARY sunshine xyz semon SQL> desc employee NameNull?Type emp_idNUMBER( )emp_name VARCHAR ( )salaryNUMBER( )可以通过下面的语句查询重复的记录 SQL> select * from employee;EMP_ID EMP_NAMESALARY sunshine sunshine semon semon xyz semon SQL> select distinct * from employee;EMP_ID EMP_NAME SALARY sunshine semon xyz SQL>select * from employee group by emp_id emp_name salary having count (*)> EMP_ID EMP_NAME SALARY sunshine semon SQL> select * from employee e where rowid in (select max(rowid) from employe e where e emp_id=e emp_id ande emp_name=e emp_name and e salary=e salary);EMP_ID EMP_NAME SALARY sunshine xyz semon 删除的几种方法 ( )通过建立临时表来实现SQL>create table temp_emp as (select distinct * from employee)SQL> truncate table employee; (清空employee表的数据)SQL> insert into employee select * from temp_emp;(再将临时表里的内容插回来)( )通过唯一rowid实现删除重复记录 在Oracle中 每一条记录都有一个rowid rowid在整个数据库中是唯一的 rowid确定了每条记录是在Oracle中的哪一个数据文件 块 行上 在重复的记录中 可能所有列的内容都相同 但rowid不会相同 所以只要确定出重复记录中那些具有最大或最小rowid的就可以了 其余全部删除 SQL>delete from employee e where rowid not in (select max(e rowid) from employee e wheree emp_id=e emp_id and e emp_name=e emp_name and e salary=e salary); 这里用min(row lishixin/Article/program/Oracle/201311/18369
Ⅶ sql中怎么删除两条重复记录并保留一条
将数据去弊察余重复后暂存到临时表#a中
selectdistinct*into#afromtable1where条件
deletetable1where删除限制条件
insert没旅intotable1select*from#a-将暂存的数据插回数据库
droptable#a-删除临时表
注:当前的数据库,每一个表都应该租滚有一个标志字段,以保证记录不完全重复,否则实用中极易出问题。
(7)sql删除重复的行扩展阅读:
SQL语句删除掉重复的其他情况
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
SELECT
*
FROM
people
WHERE
peopleId IN (
SELECT
peopleId
FROM
people
GROUP BY
peopleId
HAVING
count(peopleId) > 1
)
2、查找表中多余的重复记录(多个字段)
SELECT
*
FROM
vitae a
WHERE
(a.peopleId, a.seq) IN (
SELECT
peopleId,
seq
FROM
vitae
GROUP BY
peopleId,
seq
HAVING
count(*) > 1
)
参考资料来源:结构化查询语言(SQL)-网络
Ⅷ SQL查询中如何剔除重复
1,存在两条完全相同的纪录
这是最简单的一种情况,用关键字distinct就可以去掉
example: select distinct * from table(表名) where (条件)
2,存在部分字段相同的纪录(有主键id即唯一键)
如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
example:
select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])
3,没有唯一键ID
example:
select identity(int1,1) as id,* into newtable(临时表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,....])
drop table newtable
(8)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)
Ⅸ sql 去掉重复行
select distinct news.id,title,d_time,imgurl from news,Img where news.id =new_id 在SQL Server中有一个关键字distinct,这芦尺个就绝橘是去掉重陪宏高复行的该关键字具体用法参看SQL帮助
Ⅹ sql命令里面去掉重复值是使用distinct
DISTINCT关键字可从SELECT语句的结果中消除重复的行。如果没有指定DISTINCT,将返回所有行,包括重复的行。
例如,如果选择ProctInventory中的所有产品ID时没有使用DISTINCT,将返回1069行。
如果使用了DISTINCT,就可以消除重复的行,只查看唯一的产品ID:USEAdventureWorks;.ProctInventory此查询将返回432行。
DISTINCT关键字可从SELECT语句的结果中除去重复的行。如果没有指定DISTINCT,那么将返回所有行,包括重复的行。