我有一个带有标签文本数组列的postgresql表。
我在此数组中有标签。
查找数组中是否有一个或多个标签的最佳方法是什么?
例如,我想在数组{A,B,C,D}中找到带有标签A和C的行将匹配,但在{A,D,E}中不匹配,我希望能够找到与用户想要的。
目前我使用的是
SELECT * FROM tarray WHERE ('tag1'=ANY(tags) AND 'tag4'=ANY(tags))
但是它不允许我轻易找到两个以上的标签
答案 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对于多个功能