我有一个使用Informatica工作流编译的Oracle表。它未通过完整性检查,因为以下查询返回不同数量的行:
SELECT DISTINCT * FROM table // 4,000 rows
SELECT * FROM table // 4,006 rows
该表由17个字段组成,其中没有一个是唯一键(显然)。如何找到6个重复的行?
答案 0 :(得分:3)
用于返回重复的行。
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
)
我已将下面的数据插入表格
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的帮助下对表格进行分区后,我们将得到以下结果
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;
答案 1 :(得分:0)
一个可能性是使用分析函数来计算同一组中的行,我不知道如何在不编写某些子句中的所有列的情况下编写查询:
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;