You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中构建引用列的JSONPath查询?

PostgreSQL jsonb_path_query 引用SQL列值的正确写法

你遇到的错误翻译过来是:"语法错误,在jsonpath输入末尾意外遇到IDENT_P",原因是jsonpath表达式里不能直接写SQL列名(比如c.fruit)——PostgreSQL会把它当成jsonpath语法里的标识符,而不是SQL列的值。

要让JSON属性和SQL列值比较,得用参数绑定的方式,把SQL列的值传入jsonpath表达式:

正确写法示例

jsonb_path_query(p.blah::jsonb, '$[*] ? (@.fruit == $fruit)', jsonb_build_object('fruit', c.fruit))

完整查询示例

比如关联表查询时的用法:

SELECT 
  p.id,
  jsonb_path_query(p.blah::jsonb, '$[*] ? (@.fruit == $fruit)', jsonb_build_object('fruit', c.fruit)) AS matched_fruit_item
FROM 
  products p
JOIN 
  categories c ON p.category_id = c.id;

原理说明

jsonpath的解析逻辑和SQL是分离的,它无法识别SQL中的列名。通过jsonb_build_object把SQL列c.fruit的值包装成JSON对象,作为第三个参数传入jsonb_path_query,jsonpath里的$fruit就会被替换成对应列的实际值,这样就能完成比较。

内容的提问来源于stack exchange,提问作者evilfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:36:34