Postgres Выберите, где массивы имеют одинаковые значения, но не имеют определенного порядка. - PullRequest
0 голосов
/ 11 июня 2018

Попытка запросить значения в таблице, где два массива имеют одинаковое значение, но необязательно в одном и том же порядке.

дано: столбец со значением

{'first', 'second'}

Ожидается:

SELECT * FROM my_table WHERE array_column = {'second', 'first'}

Ожидается:

SELECT * FROM my_table WHERE array_column = {'second'}

Результат 1

{'first', 'second'}

Результат 2: ничего

Я могу отсортировать входной массивЯ запрашиваю, но не могу гарантировать, что в базе данных эти массивы будут храниться в том же порядке.Есть ли простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Предполагая следующую структуру данных:

CREATE TABLE my_table
(
  id BIGINT PRIMARY KEY,
  array_column TEXT[]
);

INSERT INTO my_table ( id, array_column ) VALUES ( 1, ARRAY['first'] );
INSERT INTO my_table ( id, array_column ) VALUES ( 2, ARRAY['first','second'] );
INSERT INTO my_table ( id, array_column ) VALUES ( 3, ARRAY['first','second','third'] );

Объединение содержит оператор (@>) и содержится оператором (<@):

SELECT
  *
FROM
  my_table
WHERE
  array_column <@ ARRAY['second','first'] AND
  array_column @> ARRAY['second','first'];

Вывод:

| id | array_column |
|----|--------------|
|  2 | first,second |

SQLFiddle

0 голосов
/ 11 июня 2018

Один из методов заключается в использовании операторов «Содержит»:

SELECT t.*
FROM my_table t
WHERE array_column <@ array('second', 'first') and
      array_column @> array('second', 'first')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...