Запрос одних значений из бд и удаление других одним запросом
Имеется ли способ в Postgres вернуть выбранные значения и удалить другие одним запросом?- Мне нужно удалить все строки не подлежащие изменению и вернуть оставшиеся Я составил такой запрос:
WITH cte_rows_to_insert_or_update as (
select id, depjob, depcode
from department
where depcode in ('depcode1', 'depcode2', 'depcode3')
and depjob in ('depjob2', 'depjob1')
),
delete_query as (
delete from department
where id not in (select id from cte_rows_to_insert_or_update)
RETURNING null
)
select depcode, depjob
from cte_rows_to_insert_or_update
left join delete_query on depjob = depjob;
Но сам понимаю, что он костыльный, есть ли способ лучше? Схема базы такая:
create table if not exists department
(
id bigserial
constraint department_pkey
primary key,
depcode varchar(20),
depjob varchar(100),
description varchar(255),
constraint department_depcode_depjob_key
unique (depcode, depjob)
);
insert into department(depcode, depjob, description) VALUES ('depcode1','depjob1','decription131');
insert into department(depcode, depjob, description) VALUES ('depcode2','depjob1','decription112');
insert into department(depcode, depjob, description) VALUES ('depcode2','depjob2','decription133');
insert into department(depcode, depjob, description) VALUES ('depcode3','depjob1','decription12');
insert into department(depcode, depjob, description) VALUES ('depcode3','depjob3','decription13')
SQL fiddle : http://sqlfiddle.com/#!17/4bbe9d