WERE IN (удалить с помощью подзапроса RETURNING) - PullRequest
0 голосов
/ 05 апреля 2019

Допустим, у меня есть 2 таблицы.

Таблица submissions со столбцами: message_id, segment_id, ...

Таблица segments со столбцами: segment_id, ...

Мне нужно удалить записи в обеих таблицах только на основе message_id.

Я знаю, что могу сделать что-то вроде этого:

DELETE
    FROM
        segments
    WHERE
        segment_id in (select segment_id FROM submissions WHERE message_id = p_message_id);

DELETE
    FROM
        submissions 
    WHERE
        message_id = p_message_id;

Но мне интересно, есть ли более элегантный (с точки зрения производительности) способ сделать что-то подобное за один раз?

DELETE
    FROM
        segments
    WHERE
        segment_id in (DELETE FROM submissions WHERE message_id = p_message_id RETURNING segment_id);

Если я запускаю следующий подзапрос 'delete' для себя, он работает должным образом и возвращает удаленные сегмент_id:

DELETE FROM submissions WHERE message_id = p_message_id RETURNING segment_id;

Есть идеи?

1 Ответ

2 голосов
/ 05 апреля 2019

Вы можете удалить из двух таблиц одновременно, если вы укажете их в предложении DELETE, поэтому я думаю, что вы просто хотите что-то вроде этого:

DELETE s, si
FROM segments s INNER JOIN segment_id si
  ON s.message_id = si.message_id
WHERE s.message_id = p_message_id

Здесь есть несколько примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...