MySQL:WITH + UPDATE
MySQL:WITH + UPDATE
WITH old_orders AS (
SELECT id FROM orders
WHERE created_at < '2023-01-01' AND status = 0
)
UPDATE orders o
JOIN old_orders t ON t.id = o.id
SET o.status = 9;PostgreSQL:数据修改 CTE
PostgreSQL:数据修改 CTE
WITH removed AS (
DELETE FROM sessions
WHERE created_at < now() - INTERVAL '30 days'
RETURNING *
)
INSERT INTO sessions_archive
SELECT * FROM removed;| MySQL | WITH 可放在 UPDATE/DELETE 之前;CTE 内部不能执行数据修改 |
|---|---|
| PostgreSQL | CTE 内可写数据修改语句并搭配 RETURNING |
| 注意 | 整个语句是一个执行单元,先小范围演练 |