как получить повторяющиеся записи и удалить их в таблице A, а также вставить эти извлеченные повторяющиеся записи в другую таблицу B (в postgres db)
SQL-запросы необходимы для моего проекта.
как получить повторяющиеся записи и удалить их в таблице A, а также вставить эти извлеченные повторяющиеся записи в другую таблицу B (в postgres db)
SQL-запросы необходимы для моего проекта.
Чтобы удалить дубликаты без уникального столбца, вы можете использовать виртуальный столбец 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;
create table
) - person a_horse_with_no_name   schedule 05.03.2015