首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将仅在两列之间交换的值不同的行标记为重复行并将其删除

将仅在两列之间交换的值不同的行标记为重复行并将其删除
EN

Stack Overflow用户
提问于 2015-05-01 20:34:57
回答 2查看 81关注 0票数 1

我想从我的数据库中删除行,如果它们之间的唯一区别是SortnameSpouse_Sortname是交换的。我想要这样做的方法是,通过在列keep中插入一个值1来标记要删除的那些,否则在列keep中插入一个0

代码语言:javascript
复制
recordID Sortname                 Spouse_Sortname        Keep    
3        SMITH Anne-Marie         ACTONTON John Michael  0    
683      BARON Peter Jack         BARON Jan Shirlely     0    
22       BARON Jan Shirlely       BARON Peter Jack       1    
28       QUINN Robert             QUINN Margaret Joy     0    
29       QUINN Margaret Joy       QUINN Robert           1
552      JOHNSTONE Brendan James  BROWN Julie            0

例如-请参阅记录ID 683和22

记录ID 683中的Sortname与记录ID 22中的Spouse_Sortname相同,反之亦然,因此我只想保留其中一条记录。记录ID 28和29也是如此。

我希望找到除了交换了SortnameSpouse_Sortname之外相同的记录,并将Keep列标记为与我的示例类似。

只要只剩下一条记录,它保留哪一条记录都无关紧要。

EN

回答 2

Stack Overflow用户

发布于 2015-05-01 23:58:14

这些是复制品

代码语言:javascript
复制
select t2.*  
  from table t1 
  join table t2 
    on t1.name = t2.spouseName 
   and t1.spouseName = t2.name 
   and t2.recordID > t1.recordID -- this is how you keep one
票数 1
EN

Stack Overflow用户

发布于 2015-05-02 01:33:10

这将标记具有较高recordID的行:

代码语言:javascript
复制
SELECT t1.*,
   CASE WHEN EXISTS(SELECT * FROM tab AS t2
                    WHERE t1.Spouse_Sortname = t2.Sortname
                    AND t1.recordID > t2.recordID)
        THEN 1
        ELSE 0
   END
FROM tab AS t1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29986938

复制
相关文章

相似问题

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