如何选择Postgres的数组列中是否包含数组的任何部分?

时间:2018-09-06 19:28:53

标签: arrays postgresql psycopg2

我在Postgres中有一个表格,如下所示:

ROW    Fruit
----   -----
1.     {"Candied Apples" , "Oranges"}
2.     {"Oranges"}
3.     {"Granny Smith Apples"}

使用以下查询,我可以获取包含“格兰尼·史密斯苹果”的第3行:

SELECT * FROM mytable WHERE Fruit @> '{"Granny Smith Apples"}';

我现在要做的是进行数组比较,如果在该列中找到我的任何数组,我想返回该行。

我尝试过:

SELECT *  mytable WHERE Fruit @> ANY('{"Oranges","Granny Smith Apples"}');

...我没有得到任何结果。我还尝试过“具有相同的元素”,但这仍然只给我第二行而不是第一行?

SELECT *  mytable WHERE Fruit && '{"Oranges","Granny Smith Apples"}';

我还尝试在数组中搜索单个值,但是这也不起作用:

SELECT *  mytable WHERE Fruit @> ANY('{"Oranges"}');

我得到0条结果。仅当我针对其中仅包含1个值的数组(完全匹配)检查单个值时,它才似乎起作用。

有什么想法我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

Arg。我在列中有一个空格,一旦修复,它就可以正常工作。

从此:

ROW    Fruit
----   -----
1.     {"Candied Apples" , "Oranges"}
2.     {"Oranges"}
3.     {"Granny Smith Apples"}

对此:

ROW    Fruit
----   -----
1.     {"Candied Apples","Oranges"}
2.     {"Oranges"}
3.     {"Granny Smith Apples"}