sql如何删除重复行数据

随笔 - 18&
评论 - 102&
&&&&&&&&&&&
SQL:删除重复数据,只保留一条用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&& peopleName in (select peopleName&&& from people group by peopleName&&&&& having count(peopleName) & 1) and&& peopleId not in (select min(peopleId) from people group by peopleName&&&& having count(peopleName)&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)&&
6.消除一个字段的左边的第一位:
update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%'
7.消除一个字段的右边的第一位:
update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村'
8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录 update vitae set ispass=-1 where peopleId in (select peopleId from vitae group by peopleId,seq having count(*) & 1) and seq in (select 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) & &
阅读(...) 评论()查询重复或不重复记录SQL语句 - 独孤依人 - ITeye技术网站
博客分类:
1.如何用SQL语句把一个表里面某字段内有相同的记录查询出来
现在有一个表 有三列 分别是tel,name,addr
我现在要查询name一样的
具体T-SQL语句要怎么写 求助
就是name这个列有很多记录在数据库里面 这些人有很多哈 就是如何把这些同名同姓的记录找出来
只显示name
select name from tb group by name having count(*) & 1
显示所有数据
select * from name in (select name from tb group by name having count(*) & 1)
2.T1表有F1,F2,F3字段 T2表有F1,F4字段 查出T1表里所有有重复的记录,如下
select * from T1 where F1 in(select F1 from T1 group by F1,F2,F3 having count(*)&1)
3.怎样用SQL语句在一个表里找出具有两个相同属性的记录?
悬赏分:5 - 解决时间: 17:11
比如说这个表里有属性:姓名,学号,专业,籍贯等。那我现在要找出专业和籍贯都相同的学生记录。如何用SQL语句实现?
假设相同的专业名为A,籍贯名为B,表名为TAB
问题补充:不好意思,忘了说一个条件。
就是事先不知道有哪些记录里的专业和籍贯是相同的,A和B是未知的,即有可能A和B有多种取值情况,而现在要全部把它们查找出来。
不是专业=籍贯,而是不同的记录中专业相同AND籍贯相同的,比如说专业都是计算机的,籍贯都是福建福州的;或者专业都是数学的,籍贯都是福建厦门的。
select 专业,籍贯 , count(*) from tab
group by 专业,籍贯
是专业,籍贯相同的学生记录数
select 专业,籍贯 , count(*) from tab
group by 专业,籍贯 having count(*)&1
是专业,籍贯相同的学生记录数&1条的
select 姓名,学号 , 专业,籍贯 from tab
order by 专业,籍贯
若你想查某个专业 如 A 和籍贯 如 B的话,
select * from TAB where 专业='A'and 籍贯='B'
例如有如下表结构和值
方案一:distinct
select distinct name from table
得到结果:
实现效果,那如果要同时打开其它记录呢?再试试
select distinct name,id from table
测试没什么效果,查下得知,这样实际是要name和id字段都重复才被筛选。继续查找可得如下方法:
方案二:group by
select *, count(distinct name) from table group by name
Oracle下测试失败,据说MYSQL下通过,不管,继续思考....
select *, count(distinct name) from table group by name 在MYSQL测试失败
翻翻书,试试
select min(fid),name,sex from table group by name
成功,现实如下结果:
MYSQL测试,没有效果
继续思考,如果要打开所有记录,不指定字段用(*),貌似这方法就不行了!
select * from table where fid in(Select min(fid) FROM table group by name)
本来已经完了,突然想起前几天在网上查了查询数据中所有某字段重复的记录
name in(select
count(name)=2)
得到如下结果:
以此类推:
name in(select
count(name)=1)
按道理说没问题,大家试试~~
再多的字段都全部现实。哎,原来如此简单!回顾网上方法distinct,Inner
Join等等,麻烦,而且有很大局限性.
总结如下:
select distinct name from table打开重复记录的单个字段
select * from table where fid in(Select min(fid) FROM table group by name)打开重复记录的所有字段值
name in(select
count(name)=1)打开重复任意次数的所有记录
Sql Server里面如果没有设定主键而删除重复数据很麻烦:
一:保留重复记录中的一条记录,其他全部删除。
--1:建立临时表,把不重复的数据转存
select distinct * into #Tmp from 表名;
--2:删除原表数据
truncate table 表名;
--3:将数据导回
insert into 表名 select * from #T
--4:删除临时表
drop table #T
******************
如果是oracle的话,把 rowid 查出来,按照rowid删除就可以了。
select rowid,表名.* from 表名;
delete from 表名 where rowid != '刚才查询出的某个值'
******************
select post_content,post_title from wp_posts group by post_content,post_title having count(*)&1
先看看有多少重复的
假设你表中还有id的一个字段
select min(id),post_content,post_title from wp_posts group by post_content,post_title
这些选出来后你看看这些是否可以不删除
delete from wp_posts where id not in (select min(id) from wp_posts group by post_content,post_title)
浏览 20235
duguyiren3476
浏览: 191189 次
来自: 北京
为什么我查出来的hbase数据都是base64编码的? 我保存 ...
不错,谢谢!
确实不怎么快,httpfs的上传你可以理解为普通的httpup ...
你好,能问一个问题吗,我最近页也试用了一下httpfs,发现一 ...
请教几个问题:1.第7步,你把hbase 0.92放在nutc ...SQL删除重复的条目的最简单方法_数据库技术_Linux公社-Linux系统门户网站
你好,游客
SQL删除重复的条目的最简单方法
来源:Linux社区&
作者:jianxin
评教系统最后的一项工作,就是对数据进行整理,这个万恶之源就是允许了学生自己选课,当然这个功能的开放,也使得老师减少了一点工作量。对于此功能的评价不再多说。下面开始进入话题:
评教系统要删除的不是重复的条目,而是项目比较少的条目。先说下原因:课程的授予,一般是有教学秘书进行授课的,但是漏授的事情频繁发生,这就造成了有的学生上的课,评价界面却没有,负责的学生就自己选了,但是很有可能选错或者只有极个别人选,那么对于此老师教的此课,只有少数人评价,那么这就属于无效数据,是我们要删除的。
下面说下我的思路的一步步转变:
第一印象是从后台界面找到那条记录,查询老师、课程分别对应的ID,再在评价结果表里面进行更改,我没有这样做,也没有去尝试。
我们是学编程的,对于重复的事情,一定不可以自己去做,所以我就努力的想sql语句进行删除。期间进行了各种嵌套,我的思路是首先把评教人次少于10(一般多于10的我们就认为其有一定效应),然后从这个查询出来的结果中提取出来教师ID以及课程ID,然后通过一个delete语句进行删除,
悲剧的是我弄了一整天也没弄出来,我先附一下没有弄出来的代码,希望高手指出怎么才可以修改正确。
delete&TheoryResult&&&&
&&&&where&TheoryResult.TeacherId&in&&
&&&&&&&&(select&c.TeacherId&from&(select&teacherid,courseid,COUNT(*)&as&tcount&from&TheoryResult&&
&&&&&&&&where&yearTermNo='201201'&&
&&&&&&&&group&by&TeacherId,CourseId&&
&&&&&&&&--with&rollup&&
&&&&&&&&having&COUNT(*))&as&c)&&&
&&&&and&TheoryResult.CourseId&in&(&&
&&&&&&&&select&c.TeacherId&from&(select&teacherid,courseid,COUNT(*)&as&tcount&from&TheoryResult&&
&&&&&&&&where&yearTermNo='201201'&&
&&&&&&&&group&by&TeacherId,CourseId&&
&&&&&&&&--with&rollup&&
&&&&&&&&having&COUNT(*))&as&c)&&
&&&&and&yearTermNo='201201'&&
TheoryResult是评价结果表,201201是一个时间限定,说明是2012年上半年,其他的with rollup被注释掉了,这里用不上。我的这个代码完全是按照上面的思路进行的,但是没有成功。
后来果断选择更简单的方法,那就是通过程序将其进行关联。代码是最美的,也是最能说明白问题的,下面看代码:
using&System.Collections.G&&
using&ponentM&&
using&System.D&&
using&System.D&&
using&System.L&&
using&System.T&&
using&System.Windows.F&&
using&System.Data.SqlC&&
using&System.D&&
namespace&deleteillegaldata&&
&&&&public&partial&class&frmMain&:&Form&&
&&&&&&&&public&frmMain()&&
&&&&&&&&{&&
&&&&&&&&&&&&InitializeComponent();&&
&&&&&&&&}&&
&&&&&&&&private&void&btnDeleteIllegalData_Click(object&sender,&EventArgs&e)&&
&&&&&&&&{&&
&&&&&&&&&&&&SqlConnection&sqlConn=new&SqlConnection("server="+txtServer.Text.Trim()+";database=Evaluation201201;uid=sa;pwd=123456;");&&
&&&&&&&&&&&&SqlConnection&sqlConn1&=&new&SqlConnection("server="&+&txtServer.Text.Trim()&+&";database=Evaluation201201;uid=sa;pwd=123456;");&&
&&&&&&&&&&&&sqlConn.Open();&&
&&&&&&&&&&&&sqlConn1.Open();&&
&&&&&&&&&&&&SqlCommand&sqlCmd=new&SqlCommand("select&teacherid,courseid,COUNT(*)&as&tcount&from&TheoryResult&where&yearTermNo='201201'&group&by&TeacherId,CourseId&&having&COUNT(*)",sqlConn);&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&SqlDataReader&sqlDtr&=sqlCmd.ExecuteReader();&&
&&&&&&&&&&&&while(sqlDtr.Read())&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&SqlCommand&sqlCmd1=new&SqlCommand("delete&TheoryResult&where&TeacherId='"&+&sqlDtr[0]&+&"&'&and&CourseId='"+sqlDtr[1]+"'&and&yearTermNo='201201'",sqlConn1);&&
&&&&&&&&&&&&&&&&sqlCmd1.ExecuteNonQuery();&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&MessageBox.Show("删除成功");&&
&&&&&&&&&&&&sqlConn.Close();&&
&&&&&&&&&&&&sqlConn1.Close();&&
&&&&&&&&}&&
用了一个while循环,这个效率的问题嘛,是低一点点,但是比你手动删除要快很多,个人感觉还是sql语句执行的要快点,所以写成存储过程可能会好一点点。
看到这里你是不是感觉有种上当的感觉呢?其实没有,删除重复的条目嘛,其实用这个修改一下完全可以的哦,只是提供一个思路,就是把要检查的重复列在group by中体现,在while循环中套一个for循环,for循环对tcount进行遍历,如果有3个,你删除2个那样不可以了嘛。
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 sql去除重复列 的文章

 

随机推荐