查找完全不同的行

Find completely non-distinct rows

我有一个 Oracle table 我是使用 Informatica 工作流编译的。它未通过完整性检查,因为以下查询 return 不同的行数:

SELECT DISTINCT * FROM table // 4,000 rows
SELECT * FROM table // 4,006 rows

table 由 17 个字段组成,其中 none 是唯一键(很明显)。我怎样才能找到 6 个重复的行?

用于返回重复行。

  select * from 
    (SELECT cd.*,
            ROW_NUMBER ()
            OVER (PARTITION BY column1,column2...column2
                  ORDER BY column_names)
               seq_no
       FROM table cd)
    where seq_no>1;

例如,我在下面创建了一个 sample_table 以便您更好地理解。

create table sample_table
(
id1 number,
id2 number
)

我已将以下数据插入 table

 ID1    ID2
    1   2
    1   2
    1   2
    2   3
    2   3
    2   3

在上面的数据集中,我们有 6 行,但只有两行不同。 通过使用以下查询,我们可以获得不同的行和非不同的行。

    SELECT cd.*,
                ROW_NUMBER ()
                OVER (PARTITION BY id1
                      ORDER BY id1)
                   seq_no
           FROM sample_table cd

在 id1 的帮助下对 table 进行分区后,我们将得到以下结果

ID1 ID2 SEQ_NO
1   2   1
1   2   2
1   2   3
2   3   1
2   3   2
2   3   3

然后,如果您想查看不同的行,请使用下面的查询

select * from 
    (SELECT cd.*,
            ROW_NUMBER ()
            OVER (PARTITION BY id1
                  ORDER BY id1)
               seq_no
       FROM sample_table cd)
    where seq_no=1;

如果您想在查询下方查看重复集使用

select * from 
    (SELECT cd.*,
            ROW_NUMBER ()
            OVER (PARTITION BY id1
                  ORDER BY id1)
               seq_no
       FROM sample_table cd)
    where seq_no>1;

一种可能是使用分析函数来计算同一组中的行数,我看不出如何在不写入某些子句中的所有列的情况下编写查询:

select * 
from (
   Select a.*, count(*) over (partition by column1, column2, ..., column17) as cnt
   from your_table a
)
where cnt>1

这应该有 12 行,因为有 6 行是重复的。

一个基本的 sql 查询是:

select  col1, col2, ..., col17
from table
group by col1, col2, ..., col17
having count(*) > 1;