如何在不使用HAVING / GROUP BY的情况下在Oracle中找到重复值

时间:2015-11-18 01:18:21

标签: sql oracle duplicate-data

我需要一个查询来选择不使用HAVING COUNT函数的重复值列表(这是由于软件约束只允许我使用SELECT,FROM和WHERE)。

以类似的方式:

select column_name, count(column_name)
from table
group by column_name
having count (column_name) > 1;

3 个答案:

答案 0 :(得分:2)

您可以使用窗口函数

选择重复的column_name值
select * from (
  select column_name, count(*) over (partition by column_name) cnt
  from mytable 
) t1 where cnt > 1

这是使用exists的另一个查询,以防您无法使用窗口函数

select * from mytable t1
where exists (
    select 1 from mytable t2
    where t2.column_name = t1.column_name
    and t2.id <> t1.id
)

答案 1 :(得分:2)

我可以将rowid视为一个选项:

select column_name from table a
where a.rowid >
any( select b.rowid
from table b
where a.column_name = b.column_name );

这是example

答案 2 :(得分:1)

纯粹使用SELECT,FROM,WHERE(附加DISTINCT):

 SELECT DISTINCT a.column_name FROM mytable as a, mytable as b
 WHERE a.rowID != b.rowID AND a.column_name = b.column_name;

或者,也许更好

 SELECT DISTINCT a.column_name FROM mytable as a, mytable as b
 WHERE a.rowID < b.rowID AND a.column_name = b.column_name;

这看起来像是某些数据库课程中的练习。然而,我认为答案在现实中并没有用。 :)