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

PostgreSQL 13中使用LIKE操作符关联JSON数据两表时遇语法错误

PostgreSQL 13 JSON字段LIKE关联语法错误解决方法

问题核心

你的错误源于JSON字段提取语法与LIKE匹配串的写法混淆,原SQL中错误地将JSON提取表达式直接嵌入到LIKE的字符串参数里,导致引号嵌套混乱,触发语法错误。

错误示例(问题中的SQL片段)

-- 错误写法,引号嵌套错误且逻辑混乱
...
WHERE ta.json_data::json->>'dv_DeptId' like '%e.json_data::json->'DepartmentId'%'
...

正确写法解析

要实现两张表JSON字段的LIKE关联,必须先分别提取两张表中JSON字段的文本值,再通过字符串拼接通配符完成LIKE匹配:

  1. 使用->>运算符从JSON字段中提取文本类型的值(避免JSON类型直接参与字符串操作)
  2. 用||运算符拼接通配符%和另一张表提取出的JSON字段值

完整正确SQL示例

假设两张表分别为table_a和table_b,各自的JSON字段为json_data:

SELECT 
    ta.*, tb.*
FROM table_a ta
JOIN table_b tb 
    ON ta.json_data::json->>'dv_DeptId' LIKE '%' || tb.json_data::json->>'DepartmentId' || '%'
-- 或者根据需求调整匹配方向,比如tb的字段包含ta的字段
-- ON tb.json_data::json->>'DepartmentId' LIKE '%' || ta.json_data::json->>'dv_DeptId' || '%'

关键说明

  • json->>'key'会将JSON字段中指定key的值转为文本,确保可以正常参与字符串的LIKE匹配
  • 不要将JSON提取表达式(如tb.json_data::json->>'DepartmentId')直接写到LIKE的单引号字符串内,必须通过||拼接成合法的匹配串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:01:24