根据条件删除重复的行

时间:2010-10-04 10:14:58

标签: sql postgresql

我正在使用PostgreSQL数据库。我有如下数据。

   id      name1              name2            modified_date
   - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   40      Balfe           | Pat            | 2010-10-01 17:48:44.804823 
   41      Battigan        | David          |                            
   42      Balfe           | Pat            | 2010-10-01 12:46:49.627593 
   44      Balfe           | Pat            | 2010-10-04 14:04:28.72415  
   45      Balfe           | Pat            | 
   46      Balfe           | Pat            | 2010-10-01 17:30:39.193153 
   47      Balfe           | Pat            |                            

我想从表中删除一些行。删除的条件是:

  1. 它会删除modified_date = Null的重复记录       - >不应删除一份重复记录副本。
  2. 不应删除修改日期的记录,尽管它们是重复的。
  3. 从上表中,应删除标识为47 45的记录。

2 个答案:

答案 0 :(得分:4)

此会删除所有modified_date Is Null的记录,其中存在具有相同name1name2的其他记录,其中还有modified_date Is Null

最低id的记录不会被删除。

Delete From your_table t1
Where modified_date Is Null
And Exists ( Select 1
             From your_table t2
             Where t2.name1 = t1.name1
               And t2.name2 = t2.name2
               And t2.modified_date Is Null
               And t2.id < t1.id
           )

答案 1 :(得分:0)

嗯,有点像:

DELETE FROM tablename 
WHERE id NOT IN(SELECT DISTINCT id 
                FROM tablename 
                WHERE modified_date = Null)

不确定PostgreSQL是否支持带有IN语句的子查询。