Если условие настолько сложное, что вы не хотите выполнять его дважды (что, кстати, звучит маловероятно для меня, но в любом случае), одна из возможностей будет ALTER TABLE ... ADD COLUMN
на исходной таблице, чтобы добавить логическое поле, и запустите UPDATE
для таблицы, чтобы установить для этого поля значение true WHERE <condition>
. Тогда ваши команды INSERT
и DELETE
могут просто проверить этот столбец на наличие предложений WHERE
.
Не забудьте впоследствии удалить столбец из исходной и целевой таблиц!
Хм, еще менее навязчиво было бы создать новую временную таблицу, единственная цель которой - содержать PK записей, которые вы хотите включить. Сначала INSERT
к этой таблице, чтобы «определить» набор строк для работы, а затем присоединиться к этой таблице для копирования таблиц INSERT
и DELETE
. Эти объединения будут быстрыми, так как таблицы PK индексируются.
[EDIT]
Предложение Скотта Бэйли в комментариях, очевидно, является правильным способом сделать это, если бы я думал об этом сам! Предполагая, что все поля PK исходной таблицы будут присутствовать в таблице назначения, нет необходимости во временной таблице - просто используйте сложные условия WHERE
для вставки в место назначения, затем DELETE
из оригинальная таблица, присоединившись к этой таблице. Я чувствую себя глупо, предлагая отдельную таблицу сейчас! :)