#sql #postgresql
#sql #postgresql
Вопрос:
Можно ли вставить некоторые данные в одну таблицу, если какая-то запись удалена в другой таблице?
Я могу сделать это с помощью нескольких запросов (сначала удалить, затем вставить, проверив, существует ли он). Но это выполняется как два запроса. Возможно ли объединить запросы или какой наиболее эффективный способ сделать это?
Комментарии:
1. решение находится в руководстве
Ответ №1:
WITH deleted_rows AS (
DELETE FROM users
WHERE
id = 15
RETURNING *
)
INSERT INTO users_history (SELECT * FROM deleted_rows);
Комментарии:
1. Рассмотрите возможность добавления некоторого поясняющего текста вместо простого размещения некоторого кода.
Ответ №2:
Я объясняю свой ответ:
RETURNING *
возвращает записи таблицы, такие как select * from
command, но возвращает только удаленные записи. Эту RETURNING
команду вы также можете использовать после команды INSERT
or UPDATE
. WITH
Запрос, являющийся CTE (Common Table Expression)
запросом, особенно полезен, когда подзапрос выполняется несколько раз. Это одинаково полезно вместо временных таблиц. Он вычисляет агрегацию один раз и позволяет нам ссылаться на нее по ее имени (возможно, несколько раз) в запросах. Итак, наконец, мы используем SELECT * FROM deleted_rows
запрос, который вернет все удаленные записи, и с помощью INSERT INTO users_history
запроса мы можем вставить все эти возвращаемые записи в новую user_history
таблицу.