2015-09-27 3 views
0

У меня есть таблица с jsonb данные столбца, который выглядит следующим образом:PostgreSQL JSON массив пересечения запрос

data: { 
    "categories": [ 
     "Category A", 
     "Category D" 
    ], 
    "something": "dsa", 
} 

Я хотел бы запрашивать строки, которые имеют одну или несколько строк, существующие внутри категорий массива (не пустое пересечение).

Предположим, что эти строки для проверки - это «Категория A» и «Категория B».

Как будет выглядеть такой запрос?

Вот запрос, который делает подобную вещь кроме этого проверяет все предоставленные строки будут существующие в категории массив:

SELECT * 
FROM table 
WHERE data->'categories' @> '["Category A", "Category B"]' 

мне нужен этот запрос, чтобы соответствовать по крайней мере одну строку, а не все.

+0

Какую версию PG? Существуют значительные различия для типов json между 9.3 и 9.4. – Patrick

ответ

5

Существует ?| operator с jsonb и text[] описал как exists any:

select '["Category A", "Category D"]'::jsonb ?| array['Category A', 'Category B']; 
?column? 
---------- 
t 

select '["Category A", "Category D"]'::jsonb ?| array['Category Ax', 'Category B']; 
?column? 
---------- 
f 
Смежные вопросы