我们可以在不使用中间表的情况下从teradata中的表中删除重复记录吗

问题描述:

我们能否在不使用中间表的情况下从 teradata 的多集表中删除重复记录.

Can we delete duplicate records from a multiset table in teradata without using intermediate table.

假设我们有 2 行有值1、2、3和 1, 2, 3在我的多集表中然后删除后我应该有只有一行,即 1、2、3.

Suppose we have 2 rows with values 1, 2, 3 and 1, 2, 3 in my multiset table then after delete i should have only one row i.e. 1, 2, 3.

除非在您的系统上启用了 ROWID 使用(并且概率非常低),否则您不能这样做.您可以通过尝试解释一个 SELECT ROWID FROM 表来轻松测试它;

You can't unless the ROWID usage has been enabled on your system (and probablity is quite low). You can easily test it by trying to explain a SELECT ROWID FROM table;

否则有两种可能的方式.

Otherwise there are two possible ways.

重复次数少:

  • 创建一个新表作为 SELECT all columns FROM table GROUP BY all columns HAVING COUNT(*) >1;
  • DELETE FROM tab WHERE EXISTS (SELECT * FROM newtab WHERE...)
  • INSERT INTO tab SELECT * FROM newtab

大量重复:

  • 使用 SELECT DISTINCT * 复制到新表或复制到 SET TABLE 以去除重复项,然后重新插入
  • copy to a new table using SELECT DISTINCT * or copy to a SET TABLE to get rid of the duplicates and then re-INSERT back