Как получить повторяющиеся записи и удалить их в таблице A, а также вставить эти повторяющиеся записи в другую таблицу B (в postgres)

как получить повторяющиеся записи и удалить их в таблице A, а также вставить эти извлеченные повторяющиеся записи в другую таблицу B (в postgres db)

SQL-запросы необходимы для моего проекта.


person pjason    schedule 05.03.2015    source источник
comment
что пробовал?? уже?   -  person Bhargav Modi    schedule 05.03.2015
comment
я новичок в postgres, я знал, что в оракуле у нас есть идентификатор строки, с помощью которого мы можем получить повторяющиеся записи. Я не уверен, как это сделать в postgres   -  person pjason    schedule 05.03.2015
comment
Пожалуйста, добавьте определение таблиц (в идеале как create table)   -  person a_horse_with_no_name    schedule 05.03.2015


Ответы (1)


Чтобы удалить дубликаты без уникального столбца, вы можете использовать виртуальный столбец ctid, который по существу аналогичен столбцу rowid в Oracle:

delete from table_A t1
where ctid <> (select min(t2.ctid)
             from table_A t2
             where t1.unique_column = t2.unique_column);

Вы можете использовать предложение returning, чтобы получить удаленные строки и вставить их в другую таблицу:

with deleted as (
  delete from table_A x1
  where ctid <> (select min(t2.ctid)
                 from table_A t2
                 where t1.unique_column = t2.unique_column);

  returning * 
)
insert into table_B (col_1, col_2)
select unique_column, some_other_column
from deleted;

Если вы также хотите увидеть эти удаленные строки, вы можете добавить еще один CTE:

with deleted as (
  delete from table_A x1
  where ctid <> (select min(t2.ctid)
                 from table_A t2
                 where t1.unique_column = t2.unique_column);

  returning * 
), moved as (
  insert into table_B (col_1, col_2)
  select unique_column, some_other_column
  from deleted
  returning *
)
select *
from moved;
person a_horse_with_no_name    schedule 05.03.2015