我正在使用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 |
我想从表中删除一些行。删除的条件是:
modified_date = Null
的重复记录
- >不应删除一份重复记录副本。从上表中,应删除标识为47
或 45
的记录。
答案 0 :(得分:4)
此会删除所有modified_date Is Null
的记录,其中存在具有相同name1
和name2
的其他记录,其中还有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语句的子查询。