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匹配:
- 使用
->>运算符从JSON字段中提取文本类型的值(避免JSON类型直接参与字符串操作) - 用
||运算符拼接通配符%和另一张表提取出的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
相关产品推荐
相关产品推荐

