У меня есть строка SQL-запросов, которые необходимо выполнить по порядку, и каждый из них требует запроса WITH
. Что-то вроде этого:Рефакторинг PostgreSQL С запросом со многими операциями обновления
WITH diff AS (
SELECT NOW() - created_at as time_diff FROM table_a ORDER BY created_at DESC LIMIT 1
)
UPDATE table_x SET created_at = created_at + (SELECT time_diff FROM diff);
WITH diff AS (
SELECT NOW() - created_at as time_diff FROM table_a ORDER BY created_at DESC LIMIT 1
)
UPDATE table_y SET created_at = created_at + (SELECT time_diff FROM diff);
WITH diff AS (
SELECT NOW() - created_at as time_diff FROM table_a ORDER BY created_at DESC LIMIT 1
)
UPDATE table_a SET created_at = created_at + (SELECT time_diff FROM diff);
Это немного надуманный пример, но есть намерение «сдвиг» created_at Отметка всех записей определенного количества таблиц. Поскольку table_a
включен во все запросы WITH
, он должен быть последним обновляемым таблицей или все остальное было бы неправильно.
В идеале я хочу сделать что-то вроде этого:
WITH diff AS (
SELECT NOW() - created_at as time_diff FROM table_a ORDER BY created_at DESC LIMIT 1
)
UPDATE table_x SET created_at = created_at + (SELECT time_diff FROM diff)
UPDATE table_y SET created_at = created_at + (SELECT time_diff FROM diff)
UPDATE table_a SET created_at = created_at + (SELECT time_diff FROM diff);
И потому, что это более кратким и потому что тогда порядок не имеет никакого значения. Но это явно не юридический синтаксис.
Есть ли способ выполнить это в одном запросе?