在数组中查找多个值的最佳方法

时间:2019-02-02 18:20:19

标签: postgresql

我有一个带有标签文本数组列的postgresql表。

我在此数组中有标签。

查找数组中是否有一个或多个标签的最佳方法是什么?

例如,我想在数组{A,B,C,D}中找到带有标签A和C的行将匹配,但在{A,D,E}中不匹配,我希望能够找到与用户想要的。

目前我使用的是

SELECT * FROM tarray WHERE ('tag1'=ANY(tags) AND 'tag4'=ANY(tags))

但是它不允许我轻易找到两个以上的标签

1 个答案:

答案 0 :(得分:1)

数组的包含运算符为<@

正面测试用例

   postgresdb=> select ARRAY['tag1', 'tag4'] <@ ARRAY['tag1', 'tag2', 'tag4'] as result;
    -[ RECORD 1 ]
    result | t

阴性测试用例

postgresdb=> select ARRAY['tag1', 'tag4'] <@ ARRAY['tag1', 'tag2'] as result;
-[ RECORD 1 ]
result | f

对于您的用例,查询将是

SELECT * FROM tarray WHERE ARRAY['tag1', 'tag4'] <@ tags

参考postgres的6.10.1p4对于多个功能

相关问题