假设我在Oracle数据库如下表:甲骨文 - 查找匹配的记录用不同的值一个字段
Col1: Col2: ... Coln:
1 a ... 1
1 a ... 1
1 b ... 1
1 b ... 1
1 c ... 1
1 a ... 1
2 d ... 1
2 d ... 1
2 d ... 1
3 e ... 1
3 f ... 1
3 e ... 1
3 e ... 1
4 g ... 1
4 g ... 1
而且,我想是的记录,其中,为Col1
鲜明的列表,Col2
是不同的 - 忽略Col2
匹配所有Col1
的任何时间。
因此,在这个例子中,我想获得的结果集:
Col1: Col2:
1 a
1 b
1 c
3 e
3 f
现在,我想通了,如何使用,感觉手头的问题相当复杂的查询做到这一点:
With MyData as
(
SELECT b.Col1, b.Col2, count(b.Col2) over(Partition By b.Col1) as cnt from
(
Select distinct a.Col1, a.Col2 from MyTable a
) b
)
select Col1, Col2
from MyData
where cnt > 1
order by Col1
什么我不知道是什么,是一个更好的办法做到这一点 - 我没能做到这一点使用GROUP BY
& HAVING
,可能认为这也许可以使用自加入...这是更要做一个观察/学习新方法获得重新认识的人导致更好的(也许更有效)查询。
谢谢!
这是行得通! - 谢谢!!!仅仅为了我的教育,这会比我写查询的方式更有效率吗?另外,由于这只是为了我学习,你能想出其他方法来做到这一点吗? - 我只是好奇,看看有什么可用来增加我的SQL实力:) –
和!!!再次感谢! –
我很高兴我能帮上忙。我附加了一些热门的例子,以其他方式做到这一点 - 仅用于学习目的。 – krokodilko