没有标识列时删除重复的值

时间:2019-11-04 17:08:46

标签: sql

我有一个临时表,看起来像下面的样子:

sample table data

SheetID和PersonID是唯一的,因此通过查看以上数据,您可以看到它们是重复的。在我正在查看的数据中,上面有很常见的数据,那里有重复的记录,名字和姓氏为NULL。这些行没有ID列。

如何删除这些记录?

1 个答案:

答案 0 :(得分:0)

如果要删除两列中任何一列名称缺失的重复项,可以使用:

delete from t
    where t.surname is null and
          (exists (select 1
                   from t t2
                   where t2.sheetId = t.sheetId and t2.surname is not null
                  ) or
           exists (select 1
                   from t t2
                   where t2.personid = t.personid and t2.surname is not null
                  )
          );

注意:我将存在分为两个子句,以便数据库可以在(sheetid, surname)(personid, surname)上使用索引(如果有)。

我还猜测仅仅检查姓氏是否足够就可以了。