如何将INSERT INTO RETURNING返回值用作子查询?语法错误求解
修复PostgreSQL中INSERT作为子查询的语法错误
错误原因
PostgreSQL不允许直接将INSERT语句放在FROM子句的子查询中,这是语法规则限制,所以会抛出syntax error at or near "INTO"错误。另外注意:你语句里用双引号包裹字符串"test"是错误的,PostgreSQL中字符串常量必须用单引号,双引号仅用于引用大小写敏感的标识符(比如特殊命名的表/列)。
解决方案
分两种场景处理:
场景1:仅需获取插入记录的id
直接使用INSERT ... RETURNING即可,不需要外层SELECT:
INSERT INTO items (name) VALUES ('test') RETURNING id;
执行这条语句后,会直接返回插入行的id值。
场景2:需要将插入结果作为数据源进行关联查询
用**WITH子句(CTE公共表表达式)**包裹INSERT操作,把返回结果当作临时表使用:
WITH inserted AS ( INSERT INTO items (name) VALUES ('test') RETURNING id ) SELECT * FROM inserted;
如果要和其他表关联,比如关联orders表查询相关订单:
WITH inserted AS ( INSERT INTO items (name) VALUES ('test') RETURNING id ) SELECT i.id, o.order_number FROM inserted i JOIN orders o ON i.id = o.item_id;
内容的提问来源于stack exchange,提问作者Alsaraha
相关产品推荐
相关产品推荐

