我有一个字符串数组列的表,我试图获得所有行,其中数组列包含来自另一个字符串数组的元素。F.E:
CREATE TABLE a (b STRING[]);
INSERT INTO a VALUES
(ARRAY['car', 'train', 'boat']),
(ARRAY['elephant', 'hippo', 'tiger']),
(ARRAY['bear', 'dog', 'cat']);
现在我想获得包含数组中至少一个元素的所有行。到目前为止,我发现最好的选择是
SELECT * FROM a WHERE b @> ARRAY['dog'] OR b @> ARRAY['tiger'];
这不是很方便,因为我的数组是动态的,我需要以一种尴尬的方式构建查询。我在想我是不是漏掉了什么。比如:
SELECT * FROM a WHERE b @> ANY(ARRAY['dog', 'tiger']);
然而,我似乎没有得到它的权利,我也找不到任何信息的主题。
答案已经写在评论里了,但为了清楚起见,我在这里写出来:
SELECT * FROM a WHERE b && ARRAY['dog', 'tiger'];
或者你可以这样写
SELECT * FROM a WHERE b && '{"dog", "tiger"}';