PostgreSQL JSON数组交集查询

3

我有一个表,其中包含一个 jsonb data 列,长这样:

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

我想查询那些在类别数组中存在一个或多个字符串(不是空的交集)的行。

假设我们要检查的这些字符串是“类别A”和“类别B”。

这样的查询应该是什么样子?

这里有一个查询执行了类似的操作,只不过它检查所有提供的字符串是否存在于类别数组中:

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

我需要这个查询至少匹配一个字符串,而不是全部。

哪个版本的PG?在9.3和9.4之间的json类型有重大差异。 - Patrick
1个回答

13

有一个操作符?|,它将jsonbtext[]作为参数,被描述为存在任意

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接