sql - 根据条件删除重复行

标签 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. 具有修改日期的记录不应被删除,尽管它们是重复的。

从上表中,应删除 ID 为 47 45 的记录。

最佳答案

此记录应删除所有带有 modified_date Is Null 的记录,其中存在具有相同 name1name2 的另一条记录,该记录也具有 modified_date为空

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
           )

关于sql - 根据条件删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854254/

相关文章:

sql - 选择查询中的动态类型转换

postgresql - 如何将 generate_series 的结果添加到 PostgreSQL 中的数组?

sql - 这两个查询有什么区别

postgresql - postgresql 中的嵌套循环问题

sql - postgresql 查询 - 查找每个月的最大时间戳

sql - PostgreSQL ERROR 列不存在指的是列值

sql - 更新语句根据另一个表的最大行设置列

php - 从mysql中的多个表中选择数据?

mysql - SQL 从两个表中选择(用户有最大汽车)

postgresql - Vault - AWS RDS Postgres 集成