SQL删除重复的父子条目

时间:2015-08-31 10:48:56

标签: sql sql-server

我试过四处寻找这个问题但找不到多少。我想知道在SQL表中删除重复的父/子行的最佳方法。

例如,我有一个像这样的表:

Id | CompanyId | DuplicateId
1  |     1     |     2
2  |     2     |     1    <------ CompanyId 2 is already a duplicate of 1
3  |     2     |     3

我希望选择所有非重复项:

Id | CompanyId | DuplicateId
1  |     1     |     2
3  |     2     |     3

任何帮助或指向正确的方向都会很棒。谢谢!

编辑:我正在使用Microsoft SQL Server

2 个答案:

答案 0 :(得分:1)

这是一种适用于大多数数据库的方法:

delete from sqltable
     where duplicateid > companyid and
           exists (select 1
                   from sqltable st2
                   where st2.duplicateid = sqltable.companyid and
                         st2.companyid = sqltable.duplicateid
                  );

答案 1 :(得分:0)

试试这个

SELECT * FROM tablename t1 where CompanyId not IN  (SELECT Duplicateid from  
tablename WHERE CompnayId<>t1.CompanyId and duplicateid > companyid)