postgres как сравнить массив jsonb и массив - PullRequest
0 голосов
/ 12 апреля 2020

Это мои данные jonb

contact:{
    "name": "Jonh",
    "country": ["USA", "UK"],
  }

И мой запрос:

SELECT * FROM public.product where contact -> 'country' = ARRAY['USA','UK'];

Выполнил запрос и получил это ERROR: operator does not exist: jsonb = text[] Так как мне исправить эту ошибку?

1 Ответ

0 голосов
/ 12 апреля 2020

Вам необходимо сравнить его с массивом JSONB:

select *
from product
where contact -> 'country' = '["USA","UK"]'::jsonb;

Но это зависит от порядка элементов в массиве. Если вы хотите протестировать все ключи независимо от порядка, оператор ?& может быть лучше:

where contact -> 'country' ?& array['UK','USA']

Это, однако, также вернет строки, которые содержат дополнительные элементы в массиве. Если вам нужно точно сопоставить все элементы независимо от порядка, вы можете дважды использовать оператор @>:

where contact -> 'country' @> '["USA","UK"]'::jsonb
  and contact -> 'country' <@ '["USA","UK"]'::jsonb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...