【发布时间】:2019-02-12 02:59:45
【问题描述】:
我在 Postgres 中有一个如下所示的表:
ROW Fruit
---- -----
1. {"Candied Apples" , "Oranges"}
2. {"Oranges"}
3. {"Granny Smith Apples"}
我能够使用此查询获得具有“Granny Smith Apples”的第 3 行:
SELECT * FROM mytable WHERE Fruit @> '{"Granny Smith Apples"}';
我现在需要做的是进行数组比较,如果在列中找到我的任何数组,我想返回该行。
我试过了:
SELECT * mytable WHERE Fruit @> ANY('{"Oranges","Granny Smith Apples"}');
...我没有得到任何结果。我也试过“有共同的元素”,但这仍然只给我第 2 行而不是第 1 行?
SELECT * mytable WHERE Fruit && '{"Oranges","Granny Smith Apples"}';
我也尝试在数组中搜索单个值,但这也不起作用:
SELECT * mytable WHERE Fruit @> ANY('{"Oranges"}');
我得到 0 个结果。仅当我针对其中只有 1 个值的数组检查单个值时,它似乎才有效 - 完全匹配。
任何想法我做错了什么?
【问题讨论】:
-
带有
&&的查询适用于我并返回所有行:rextester.com/SNB38571 -
我有另一列,在执行相同操作的值之间有一个空格。我删除了空间,现在它工作正常。也许 psycopg2 有点奇怪?
标签: arrays postgresql psycopg2