sql 表中怎么根据多个字段sql查询重复的字段数据,

如何用sql语句查询和删除表中重复数据_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何用sql语句查询和删除表中重复数据
你可能喜欢查看: 12149|回复: 3
如何查询表中某个字段值对应的另一个字段中包含多个特定值的记录
阅读权限10
在线时间 小时
如题,附件中姓名列会有重复,字段和记录都很多,给出一部分,如何找出既买过香蕉也买过苹果的人并输出他们的所有包含香蕉或苹果的购买记录(需输出全部字段:姓名、购买物、购买数量、AAAA、BBBB、CCCC......)
这个附件我想要的最终输出结果应是1、2、4、5、6
求高手指点。。万分感谢。。
(27.39 KB, 下载次数: 79)
16:26 上传
点击文件名下载附件
阅读权限100
在线时间 小时
SELECT B.* FROM
(SELECT 姓名 FROM
(SELECT DISTINCT 姓名,INSTR(购买物,'香蕉')=TRUE AS 香蕉,INSTR(购买物,'苹果')=TRUE AS 苹果
FROM 表1)
GROUP BY 姓名
HAVING -2&=SUM(香蕉+苹果))A,表1 B
WHERE A.姓名=B.姓名 AND INSTR('香蕉苹果香蕉',B.购买物)复制代码一条记录只能有一个商品,如ID为4的记录,应该分拆为两条记录。香蕉一条,苹果一条。不然,在后期处理时,会遇到很多麻烦。
阅读权限30
在线时间 小时
学习中,谢谢分享!@
阅读权限10
在线时间 小时
wuxiang_123 发表于
一条记录只能有一个商品,如ID为4的记录,应该分拆为两条记录。香蕉一条,苹果一条。不然,在后期处理时,会 ...
感谢wu版的解答,最近一直在看wu版的仙侣帖,获益良多,发此贴时对SQL一窍不通,现在这个题我自己也能轻松做出来了,哈,题意没表达太清楚,以下为比较贴近我的需求的答案:
select * from 表X
where 姓名 in
(select 姓名
&&from&&(select distinct 姓名 from 表X where instr(购买物,'苹果')&0
& && &union all select distinct 姓名 from 表X where instr(购买物,'香蕉')&0)
&&group by 姓名
&&having count(*)=2
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师sql某一表中重复某一字段重复记录查询与处理
1.查询出重复记录&&select 重复记录字段 form& 数据表 group by houseno having count(重复记录字段)&1
2.重复记录只显示一条ID值最小或最大的记录
&select&& id,* from&& 数据表 where houseno (select 重复记录字段 form 数据表 group by 重复记录
字段 having count(重复记录字段)&1 )
这样把houseno重复的的ID值全部显示出,那么我们如何只显示一条id最小或最大的记录呢?
关键是在上面sql的where子句中select 重复记录字段 form 数据表 group by 重复记录字段 having count(
重复记录字段)&1修改为select min(id) form 数据表 group by 重复记录字段 having count(重复记录字段)&1
这样就查询重复记录字段中ID最小值
那么上面的语句就是
& select&& id,* from&& 数据表 where houseno (select min(id) form 数据表 group by 重复记录字段
having count(重复记录字段)&1 )
3.至于对重复记录执行delete update 就非常简单啦
& 例如只保留最小id的一条&&&&& delete 数据表 where id in (select max(id ) from 数据包 group by 重复记录字段 having count(重
复记录字段)&1)&&&update 操作不说啦都一样。
4.group by& 字段 having count与distinct的区别
distct查询显示全部字段值都是一样的唯一,一条记录
&例如id&&&& name&& sex43&111&144&111&145&111&246&222&247&222&248&333&149&333&1
SELECT distinct&&&&& [name]&&&&& ,[sex]& FROM [database].[dbo].[a]
要想实现上面的要去掉 sex字段 改成
SELECT distinct&&&&& [name]&&&&&& FROM [database].[dbo].[a]
但要想取得重复ID最小值不建议用distinct。总结:
&对于重复记录关键是查出 :采用group by 字段 having count(字段)&1&&取得最小id的一条(很关键) :采用min(id)
阅读(...) 评论()查询重复或不重复记录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)
浏览 22818
duguyiren3476
浏览: 224081 次
来自: 北京
zhangyou1010 写道请教,我执行mount -t n ...
请教,我执行mount -t nfs -o vers=3,pr ...
为什么我查出来的hbase数据都是base64编码的? 我保存 ...
不错,谢谢!
确实不怎么快,httpfs的上传你可以理解为普通的httpup ...2013年6月 MS-SQL Server大版内专家分月排行榜第一
2013年7月 MS-SQL Server大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 sql查询重复的字段 的文章

 

随机推荐