2010-10-04 82 views
2

我正在使用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. 修改日期的记录不应被删除,尽管它们是重复的。

从上面的表,用ID的记录4745应予删除。

回答

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 
      ) 
0

嗯,是这样的:

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

不知道PostgreSQL支持子查询与报表虽然。

+0

必须是'Null'而不是'= Null',但是它会删除所有记录为'Null'的记录,而不保留一条记录... – 2010-10-04 10:24:57

+0

^我对我的SQL有点生疏。感谢您指出了这一点。 – 2010-10-04 12:33:03