首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL处理重复记录管理

SQL处理重复记录管理
EN

Stack Overflow用户
提问于 2022-02-08 09:15:58
回答 1查看 54关注 0票数 0

我有一个Oracle数据库应用程序,该应用程序创建重复记录列表,供用户查看,用户可以删除、保留或标记不同的记录(合法副本)。我需要报告这个队列中的记录数量。挑战是合法的副本,因为这些副本保存在第二个数据表上,并作为每对标记(a≠b)的两行保存。但是,由于重复组可以包含多个重复项,而且记录可以标记为合法副本,因此我需要从候选组中的所有其他记录中删除标记为合法副本的记录。希望这是有意义的。

因此,这两个表的简化视图将是:重复候选

代码语言:javascript
复制
Group   Key
Dup-1   123
Dup-1   234
Dup-2   123
Dup-2   345
Dup-2   567
Dup-3   234
Dup-3   567
Dup-4   123
Dup-4   567
Dup-4   235

合法副本:

代码语言:javascript
复制
Group   Key
A       123
A       234
B       345
B       456
C       123
C       567
D       123
D       235

我想从这个例子中返回的结果是:

重复候选人

代码语言:javascript
复制
Group   Key
Dup-2   123
Dup-2   345
Dup-2   567
Dup-3   234
Dup-3   567
Dup-4   567
Dup-4   235

Dup-1不会作为合法的A组有两个密钥返回,而Dup-2将被返回,而键123和345都被标记为合法的副本,它们目前没有被标记为彼此不同。应该再次返回Dup-3,因为这两个记录没有被标记为合法的副本。最后,不应该返回DUP-4123行,因为它被标记为组中两个其他记录的合法副本,但是应该返回它们,因为它们不是彼此的合法副本。

我确实需要在SQL中实现这一点,因为我将直接将这些数据输入报告解决方案(Business或Tablaux)。有人能在这件事上给我一个正确的方向吗。不幸的是,我们的软件完全是黑匣子,所以我无法从为用户处理此问题的代码中反向工程。

EN

回答 1

Stack Overflow用户

发布于 2022-02-08 10:14:42

使用存在。如果该组中至少有一名其他成员也是成员,则返回该候选人。

代码语言:javascript
复制
select * 
from Candidates c 
where exists (
    select 1 
    from Candidates c2
    where c2.Grp = c.Grp and c2.Key <> c.Key 
       and not exists (
          select 1 
          from Legitimate l 
          where l.Key = c.Key 
            and exists (
                select 1
                from Legitimate l2
                where l2.Grp = l.Grp and l2.Key = c2.Key
            )
      )
   )
order by Grp, Key
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71031276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档