【问题标题】:How to select if any part of an array is contained in an array column in Postgres?如何选择数组的任何部分是否包含在 Postgres 的数组列中?
【发布时间】: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


【解决方案1】:

精氨酸。我在列中有一个空间,一旦我修复它就可以正常工作。

从这里:

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

到这里:

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

【讨论】:

  • {"Candied Apples" , "Oranges"}{"Candied Apples","Oranges"} 是相同的数组:rextester.com/DSQP92237 一定有其他事情发生
猜你喜欢
  • 2014-05-06
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多