DELETE FROM A WHERE task_id IN (SELECT id FROM task WHERE type = 'FFF');
DELETE FROM B WHERE task_id IN (SELECT id FROM task WHERE type = 'FFF');
Предположим, что мне нужно удалить из 5 таблиц с одинаковым условием. Нужно ли куда-то записывать результат этой выборки? Или так не делают?
Если это разово, то не стоит заморачиваться
Это в миграции Но да, разово
Модное через cte сделать select, а потом delete
Нормальный код. Оптимизировать стоит, если скорость работы неустраивает и есть шанс её повысить до устраивающей своими оптимизацыями. (В данном случае сильный разгон за счёт оптимизацый, более двух хотя бы раз — маловероятен).
Можно делать вот так (с помощью CTE, как выше посоветовали): WITH ids_to_delete AS ( SELECT id FROM task WHERE type = 'FFF' ), delete_from_a AS ( DELETE FROM a WHERE a.task_id IN (SELECT d.id FROM ids_to_delete AS d) ), delete_from_b AS ( DELETE FROM b WHERE b.task_id IN (SELECT d.id FROM ids_to_delete AS d) ) /* и так далее */ DELETE FROM z WHERE z.task_id IN (SELECT d.id FROM ids_to_delete AS d); Если это на самом деле нужно (см. выше, опять-таки).
зависит от размера выборки. Если удалять много - имеет смысл пересоздать таблицу без удаляемых данных
в миграции точно стоит пересоздать таблицу, если объем удаляемых данных достаточно значительный
Обсуждают сегодня