sql怎么查询oracle中,没有重复出现的记录(即只出现一次)和不同字段1共同存在字段2值的记录,求SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql怎么查询oracle中,没有重复出现的记录(即只出现一次)和不同字段1共同存在字段2值的记录,求SQL语句相关的知识,希望对你有一定的参考价值。

例如:表A
id value
1 a
1 b
1 c
1 d
2 a
2 c
2 f
3 a
3 b
3 d
3 e
要求查询的结果1(没重复出现的):
id value
3 e
2 f
要求查询的结果2(大家共同存在的):
value
a

注意这里ID不仅仅有1、2、3可能还有4~n多。

参考技术A select *, count(distinct value) from 表a group by value
结果:
id value count(distinct name)
3 e 1
2 f 1
最后一项是多余的,不用管就行了,目的达到。。。。。
group by 必须放在 order by 和 limit之前,不然会报错

查询某个字段重复!
select *
from 表a u
where u.value in (select u.value from 表a u
group by u.value having count(*) > 1)追问

第一句中的*, count(distinct value) 这个直接sql执行报错;
测试第二句查出的结果不符合要求。

参考技术B 石亮东的基础改的:
第二个:
SELECT distinct value
FROM (SELECT ID,
VALUE,
COUNT (*) OVER (PARTITION BY VALUE ORDER BY 1) AS value_cnt,
COUNT (distinct id) OVER () AS id_cnt
FROM 表a) a
WHERE value_cnt = id_cnt;追问

是对的,我联合语句中再加distinct 就可以了

参考技术C 1.select * from a where value in(select value from a group by value having count(1)=1)
2.select distinct value
from a
where value not in (select distinct t.value
from (select *
from (select distinct id from a),
(select distinct value from a)
order by id, value) t,
a
where t.id = a.id(+)
and t.value = a.value(+)
and a.id is null)追问

也是第一句可以,第二句不行,sql错误

追答

第二句我这没问题啊 我加了两条数据测试

追问

我的表A实际上本身就是一条联合查询的语句

追答

那没关系啊
select distinct value
from a
where value not in (select distinct t.value
from (select *
from (select distinct id from a),
(select distinct value from a)) t,
(select * from a) a--此处select * from a替换成你的查询
where t.id = a.id(+)
and t.value = a.value(+)
and a.id is null)

追问

创建的表A 是
select * from
(select * from AAAAA t1 union all
select * from BBBBB t2)
这里我把你里面出现a的地方都替换了,有点混乱,语句错误

追答

我这个看起来麻烦 但查询绝对正确
union all 都*了 外面还*什么
select distinct value
from (select * from AAAAA t1 union all select * from BBBBB t2)
where value not in (select distinct t.value
from (select *
from (select distinct id from (select * from AAAAA t1 union all select * from BBBBB t2)),
(select distinct value from (select * from AAAAA t1 union all select * from BBBBB t2))) t,
(select * from AAAAA t1 union all select * from BBBBB t2) a
where t.id = a.id(+)
and t.value = a.value(+)
and a.id is null)

参考技术D 结果1
select a.* from A a,(select value from A group by value having count(1)=1) b where a.value=b.value追问

对于结果1,这句sql测试通过。那结果2呢?

追答

结果2
select value from (select id,value from A group by id,value) group by value having count(1)=(select count(1) from (select distinct id from A))

第5个回答  2011-11-30 select ID, VALUE from T, (select id count(value) c from T GROUP BY ID) T1 WHERE T.ID = T1.ID AND T1.C = 1;追问

id count(value) c 测试不行,sql错误

删除一张表中重复数据并保留一条ID最小的记录

参考技术A 表结构为最简单的user表,递增的id,可能重复username。

首先我们来看一下查找名字重复的所有记录:

如果我们现在的要求是把所有重复的记录都删了,那么SQL语句为:

执行结果为:

无法在FROM子句中为更新指定目标表“user”,就是无法在删除时同时查询这张表,这个问题只在MySQL中出现,oracle没有。怎么解决?我们只需要在查出结果以后加一张中间表。让执行器认为我们要查的数据不是来自正在删的这张表就可以了。

现在删除所有重复数据数据做完了,考虑怎么保留重复数据中id最小的。只需要在删除时让删除该条的记录id不在重复数据id最小的当中就可以了。

执行前表数据:

执行后表数据:

以上是关于sql怎么查询oracle中,没有重复出现的记录(即只出现一次)和不同字段1共同存在字段2值的记录,求SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库查询去除重复的记录,保留其中的某一条

多表查询结果出现重复记录,根据条件只取其中的一条记录的sql语句

Oracle 查询并删除重复记录的SQL语句

删除一张表中重复数据并保留一条ID最小的记录

oracle查询

oracle 分页查询重复问题