首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -筛选冗余重复项

SQL -筛选冗余重复项
EN

Stack Overflow用户
提问于 2015-10-12 09:52:29
回答 2查看 133关注 0票数 0

我有一个表“冲突”,其中包含两个进程ID (processIDA int,ProcessIDB int)。

当两个进程(A/B或B/A)被输入到这个“冲突”表中时,就定义了唯一的冲突。

冲突表包含以下重复项:

行.1 ProcessIDA=5 ProcessIDB=6

2 ProcessIDB=6,ProcessIDA=5

我需要做的是过滤掉重复的冲突,以便只剩下:

行.1 ProcessIDB=6 ProcessIDA=5

注意:这个表的行可以在500万到5000万条记录之间变化。一旦我成功地过滤掉了副本,行的数量将正好是当前的一半。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-12 10:14:59

如果要删除副本,则

查询

代码语言:javascript
复制
;with cte as
(
  select *,
  case when ProcessIDA < ProcessIDB
  then ProcessIDA else ProcessIDB end as column1,
  case when ProcessIDA < ProcessIDB
  then ProcessIDB else ProcessIDA end as column2
  from conflicts
),
cte2 as
(
    select  rn = row_number() over
    (
        partition by cte.column1,cte.column2
        order by cte.column1
    ),*
    from cte
)
delete from cte2
where rn > 1;

SQL Fiddle

票数 3
EN

Stack Overflow用户

发布于 2015-10-12 09:57:13

你可以做一个简单的自我连接

代码语言:javascript
复制
;WITH   Conflicts   AS
(
    SELECT      *
    FROM    (   VALUES
                (6, 5),
                (5, 6),
                (1, 2),
                (1, 3)
            )   Sample (ProcessIDA, ProcessIDB)
)
SELECT  A.*
FROM    Conflicts A
JOIN    Conflicts B
    ON  A.ProcessIDA = B.ProcessIDB AND
        A.ProcessIDB = B.ProcessIDA
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33078178

复制
相关文章

相似问题

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