oracle 多字段重复记录查询

有时候我们会遇到这种情况,数据表中有两个或者多个字段相同的记录,但我们只想挑选出这些相同记录中的一条,如下:

 

id name age sex address
1 张三 20 南京
2 张三 20 上海
3 王五 23 无锡
4 李斯 25 北京

我想查询时剔除姓名、年龄和性别相同的记录,查询结果想如下形式:

 

 

id name age sex addrs
1 张三 20 南京
2 王五 23 无锡
3 李斯 25 北京

请问老师们 有啥好的方法支招。之前在网上查到通过rowid来查询,如下:

select t1.* from table t1 where rowid in   (select min(rowid)  from  table t2  where  t1. name=t2.name and t1. age=t2.age and t1.sex=t2.sex)   但是用改语句有点问题,就是有时候可以查到想要的值,有时候查询记录为空,不止为何?请知道的朋友多多指点

 

 

2个回答

select t1.*
from tbl t1
where rowid in (
select min(rowid) from tbl t2 where t1. name=t2.name and t1. age=t2.age and t1.sex=t2.sex
)

sql没问题的。不知道你是怎么查的( 用的工具吗? 我用的pl/sql developer 8.0有时候抽风),什么情况下是空?

exists写法
select t1.*
from tbl t1
where exists (
select * from tbl t2 where t1. name=t2.name and t1. age=t2.age and t1.sex=t2.sex group by t2.name,t2.age,t2.sex having t1.rowid=min(t2.rowid)
)

如果不是删除,只是查询的话,可以通过分组搞定:
select min(id),min(address), name, sex, age
from tbl t1
group by name, sex, age;

TengChenLi
TengChenLi 多谢了,先用分组查吧!
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 你多查询几次试试,有时候pl/sql瞎报,你直接sqlplus试试
7 年多之前 回复
TengChenLi
TengChenLi 我第一次插入上面几条数据时是可以查询出数据,但当我第二次在插入那些数据时就查询不到了,我用的也是pl/sql 版本是7
7 年多之前 回复

不错不错,学习了…………

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问