Как выбрать, если какая-либо часть массива содержится в столбце массива в Postgres? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть таблица в 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"}');

... и я не получаю результатов. Я также попробовал «имеет общие элементы», но это все еще только возвращает мне строку 2, а не строку 1?

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

Я также пытался найти единственное значение в массиве, и это тоже не работает:

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

Я получаю 0 результатов. Кажется, это работает, только если я проверяю одно значение для массива, содержащего только 1 значение - точное совпадение.

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 06 сентября 2018

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"}
...