Postgresql jsonb -> 对 table "mt" 的 FROM 子句条目的引用无效

Postgresql jsonb -> invalid reference to FROM-clause entry for table "mt"

所以我正在尝试内部连接多个表,以便使用名称绑定 jsonb。但是我收到了这个错误。

ERROR: invalid reference to FROM-clause entry for table "mt"

找到下面问题的娱乐fiddle。

SELECT test,jsonb_build_object(
    'myData_updated',
    json_agg(elems || jsonb_build_object('product_name', po.name))
)

FROM mainTable mt,
jsonb_array_elements(mt.myData) AS heading_elems,
jsonb_array_elements(heading_elems -> 'pItems') AS elems

JOIN products po ON (elems ->> 'pid' )::int = po.pid

INNER JOIN clients client ON client.client_id = mt.client_id
INNER JOIN projects project on project.project_id = mt.project_id

https://dbfiddle.uk/?rdbms=postgres_10&fiddle=63e5b8a49940bb50b5bb7985a947c09e

我已经尝试删除别名,但我仍然遇到同样的错误。快速谷歌搜索说这是由于 JOIN & ", delimited FROM" query

语法

table,
json_array_elements()

的快捷方式
table CROSS JOIN LATERAL
json_array_elements()

因此,您使用的 , 语法是隐式连接。之后,通过使用 INNER JOIN,您将使用显式连接。混合并不总是有效,所以用显式语法替换隐式语法并且它有效。

demo:db<>fiddle


除此之外,使用的函数 json_agg() 是一个聚合函数,所以如果你想获得其他列,如 test 你必须做一个 GROUP BY and/or 使用更多的聚合函数这些列。