Запрос одних значений из бд и удаление других одним запросом

Имеется ли способ в 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


Ответы (0 шт):