2010-10-04 105 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