首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂记录比较删除重复记录

复杂记录比较删除重复记录
EN

Stack Overflow用户
提问于 2013-11-07 18:04:30
回答 2查看 56关注 0票数 0

我尝试比较同一个表中的记录,因此我通过字段ID、X、Y和Z选择记录,并在X、Y和/或Z相等的情况下匹配它们。为了进行比较,我将表连接到自身,然后将每条记录与其他记录进行比较

我的问题是,如果我有一个记录A与字段Z上的10个其他记录B-K相匹配,那么它将列出在表的第二个实例中找到的每个记录B-K,以及在表的第一个实例中找到的A。然后,当它在表的第一个实例中找到B-K中的每个记录时,它将再次列出每个匹配的记录。在本例中,有11条记录与字段Z匹配,由于搜索的性质,我将收到121行。我希望能够将副本标记为一对记录,而不管它们是以哪种方式配对的。

结果可能在字段Z上列出为A和C匹配。然后我希望它识别作为匹配的C和A是A和C作为匹配的副本。

我使用以下代码进行查询

代码语言:javascript
复制
SELECT T1.ID AS ID1,
   T2.ID AS ID2,
   T1.X AS X1,
   T2.X AS X2,
   T1.Y AS Y1,
   T2.Y AS Y2,
   T1.Z AS Z1,
   T2.Z AS Z2
FROM (SELECT ID,
           X,
           Y,
           Z
      FROM TABLE) T1
   JOIN (SELECT ID,
                X,
                Y,
                Z
           FROM TABLE) T2
      ON    (   T1.X = T2.X
             OR T1.Y = T2.Y
             OR T1.Z = T2.Z)
         AND T1.ID <> T2.ID;
EN

回答 2

Stack Overflow用户

发布于 2013-11-07 18:08:15

要让每一对都只出现一次,可以尝试将最后一行更改为

代码语言:javascript
复制
         AND T1.ID < T2.ID;
票数 0
EN

Stack Overflow用户

发布于 2013-11-07 18:11:01

您可能想要使用exists()。

代码语言:javascript
复制
select < some columns >
  from table x as x1
 where exists (select 1
          from table x as x2
         where (x1.x = x2.x or x1.y = x2.y or x1.z = x2.z)
           and x1.id <> x2.id)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19832991

复制
相关文章

相似问题

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