json - 运算符不存在 - Postgres 和 JSON 选择查询
问题描述
我正在尝试从包含 JSONB 数据的表中检索和连接数据,其中 JSON 行的格式为:
{
"id": "d57929b35216",
"base" : {"legalName" : "SAPI S.P.A."},
"name": "SAPI S.P.A.",
}
表 ita_public
CREATE TABLE public.ita_public
(
id integer NOT NULL DEFAULT nextval('ita_data_id_seq'::regclass),
info jsonb NOT NULL,
CONSTRAINT ita_data_pkey PRIMARY KEY (id)
)
表 ita_sn_private
CREATE TABLE public.ita_sn_private
(
id integer NOT NULL DEFAULT nextval('ita_sn_private_id_seq'::regclass),
supplier_name character varying COLLATE pg_catalog."default",
supplier_streetadd character varying COLLATE pg_catalog."default",
CONSTRAINT ita_sn_private_pkey PRIMARY KEY (id)
)
SELECT 查询打印三列,连接供应商名称和嵌套名称并搜索名称:
SELECT
priv.supplier_name,
priv.supplier_streetadd,
pub.info::json->'base'->'legalName'
FROM ita_sn_private as priv
JOIN ita_public as pub ON (priv.supplier_name = pub.info::json->'name')
WHERE pub.info::json->>'name' = 'SAPI S.P.A.'
我得到错误:
错误:运算符不存在:
字符变化 = json LINE 7: 加入 ita_public 作为 pub ON (priv.supplier_name = pub.info::js...
提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。
('='下面的小帽子)
我试图简化查询以确保我的 json 路径正确:
SELECT
info::json->'base'->'legalName'
FROM
ita_public
WHERE info::json->>'name' = 'SAPI S.P.A.'
哪个工作正常。
任何人都可以协助 JOIN 声明吗?我不确定如何将两者等同起来。
解决方案
加入条件是原因:
on priv.supplier_name = pub.info::json->'name'
->
返回 JSON 对象,而不是字符串。你需要在->>
那里使用
on priv.supplier_name = pub.info::json->>'name'
与您在WHERE
条款中所做的相同
推荐阅读
- javascript - 将嵌套层次数组转换为展平对象
- reactjs - 编译失败,语法错误:缺少分号
- powerbi - 在 Power BI 上创建聚集柱形图
- kubernetes - kubeadm init 在初始化 Kubernetes 集群时失败
- ios - 与使用 AWS 移动开发工具包相关的安全风险
- c# - 使用linq json c#在字典中的两个值
- html - CSS - 背景图像在 Chrome 和 Firefox 上看起来不同
- algorithm - 我可以在 ns-3 中设置路由协议的成本吗
- c# - DateTime:自定义格式说明符
- python - 未安装 MySQL 命令行客户端