0
我有一个需要按顺序执行的SQL查询字符串,并且每个查询都需要一个WITH
查询。事情是这样的:使用许多更新语句重构PostgreSQL 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);
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);
两个,因为它更简洁,因为这样的顺序将没有真正的问题。但这显然不是合法的语法。
有没有办法在单个查询中完成此操作?