有一个名为...的列不能从查询子查询的这部分引用

Gri*_*gor 6 sql postgresql sql-insert

 WITH upt as (
 UPDATE backend."orders" SET "statusId" = 5
 WHERE "userId" IN (177962,88265) and "statusId" IN (0,1,2,3,4) RETURNING *
)
 INSERT INTO __test_result(orderid) VALUES ((SELECT orderid FROM upt))
Run Code Online (Sandbox Code Playgroud)

需要更新和记录数据,得到这个错误

ERROR: column "orderid" does not exist Hint: There is a column named 
"orderid" in table "__test_result", but it cannot be referenced from this part of the query.
Run Code Online (Sandbox Code Playgroud)

如何在表中插入所有“upt”行?它必须看起来

"upt.orderid","jsonb for that orderid"
Run Code Online (Sandbox Code Playgroud)

对于每个订单 jsonb 必须从具有相同 orderid 的“upt”列创建

小智 5

如果要使用 aselect作为插入的源(对于多行),请不要使用该values子句,请直接使用 select: insert into .. select ...

所以在你的情况下:

WITH upt as (
  UPDATE backend."orders" 
     SET "statusId" = 5
  WHERE "userId" IN (177962,88265) 
    and "statusId" IN (0,1,2,3,4) 
  RETURNING *
)
INSERT INTO __test_result(orderid) 
SELECT orderid 
FROM upt;
Run Code Online (Sandbox Code Playgroud)