Удалить повторяющиеся строки в соответствии с условием - PullRequest
2 голосов
/ 04 октября 2010

Я использую базу данных 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. Записи с датой измененияНе следует удалять, хотя они дубликаты.

Из таблицы выше следует удалить запись с идентификатором 47 или 45.

Ответы [ 2 ]

4 голосов
/ 04 октября 2010

Этот должен удалить все записи с 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
           )
0 голосов
/ 04 октября 2010

Хм, что-то вроде:

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

Не уверен, поддерживает ли PostgreSQL подзапросы с оператором IN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...