这对于来说会更简单
UPDATe,在此
RETURNING子句中可以看到加入到更新中的其他行:
- 仅使用SQL返回UPDATE之前的列值-PostgreSQL版本
目前 无法
使用
INSERT。每个文档:
该表达式可以使用由 table_name 命名的表的任何列名称 __
table_name 是
INSERT命令的目标。
您可以使用(数据修改)CTE使其正常工作。
假设
title是 每次查询的唯一 ,否则你需要做的更多:
WITH sel AS ( SELECT id, title FROM posts WHERe id IN (1,2) -- select rows to copy ), ins AS ( INSERT INTO posts (title) SELECT title FROM sel RETURNING id, title )SELECt ins.id, sel.id AS from_idFROM insJOIN sel USING (title);
如果
title不是每个查询唯一(但至少
id每个表唯一):
WITH sel AS ( SELECt id, title, row_number() OVER (ORDER BY id) AS rn FROM posts WHERe id IN (1,2) -- select rows to copy ORDER BY id ), ins AS ( INSERT INTO posts (title) SELECT title FROM sel ORDER BY id -- ORDER redundant to be sure RETURNING id )SELECt i.id, s.id AS from_idFROM (SELECt id, row_number() OVER (ORDER BY id) AS rn FROM ins) iJOIN sel s USING (rn);
第二个查询依赖于未记录的实现细节,即按提供的顺序插入行。它可以在所有当前的Postgres版本中使用,并且可能不会中断。
SQL提琴。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)