Я пытаюсь извлечь и объединить данные из таблицы, содержащей данные 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 ЛИНИЯ 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?Я не уверен, как их приравнять.