查找完全不同的行
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;
我有一个 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;