В настоящее время у меня есть запрос с использованием предложения WITH
, который я использую для получения списка идентификаторов из двух отдельных таблиц, которые я планирую DELETE
ing.
WITH ids_to_delete AS (SELECT org.uuid, person.uuid FROM organizations org INNER JOIN people person ON org.uuid = person.org_uuid)
Проблема в том, что мне нужно использовать одно и то же утверждение в двух отдельных DELETE
запросах. Один для таблицы organizations
и один для таблицы people
. Однако, если я разделяю эти операторы точкой с запятой, я теряю доступ к ids_to_delete
, и если я просто повторю запрос, я не получу те же результаты.
Я бы хотел сделать что-то подобное, чтобы сохранить доступ к моим ids_to_delete
результатам:
WITH ids_to_delete AS (SELECT org.uuid, person.uuid FROM organizations
org INNER JOIN people person ON org.uuid = person.org_uuid),
DELETE FROM organizations WHERE uuid IN (SELECT org.uuid FROM ids_to_delete),
DELETE FROM people WHERE uuid IN (SELECT person.uuid FROM ids_to_delete);
Дополнительно Организации-> Люди - это отношение «многие к одному», навязываемое FOREIGN KEY
, поэтому мне нужно сначала удалить людей.
Использование PostgreSQL 9.6.