PostgreSQL如何基于JSONB列内的值实现两张表的关联查询
错误原因
你提交的SQL存在三处语法/逻辑问题:
- 多余的
-> 'ps_sku'取值操作:根据你给出的product.sku存储格式[149461190],该字段本身就是JSON数组,没有外层嵌套ps_sku键,无需额外取键。 - 隐式逗号连接和显式JOIN混写导致解析错误,集返回函数调用需要搭配
LATERAL关键词保证语法规范。 USING子句要求关联字段必须放在括号内,你漏写了括号。
正确实现代码
根据item.sku的字段类型选择对应写法:
情况1:item.sku为数值类型
SELECT * FROM product ps CROSS JOIN LATERAL jsonb_to_recordset(ps.sku) AS t(sku int) JOIN item v USING (sku);
情况2:item.sku为文本类型
SELECT * FROM product ps CROSS JOIN LATERAL jsonb_to_recordset(ps.sku) AS t(sku text) JOIN item v USING (sku);
可选调整
如果需要保留没有匹配sku的product行,可以把CROSS JOIN LATERAL替换为LEFT JOIN LATERAL,按需添加过滤条件即可。
内容的提问来源于stack exchange,提问作者Alexandra Salamatina
相关产品推荐
相关产品推荐

