Postgres选择数组具有相等值但没有特定顺序的位置

时间:2018-06-11 15:34:54

标签: sql postgresql

尝试查询表中的值,其中两个数组具有相同的值,但不一定按相同的顺序排列。

给出:值为

的列
drop

预期:

{'first', 'second'}

预期:

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

结果1

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

结果2:没有

我可以对我要查询的输入数组进行排序,但我无法保证数据库将以相同的顺序存储这些数组。有一个简单的方法吗?

2 个答案:

答案 0 :(得分:1)

一种方法是使用"包含"操作符:

SELECT t.*
FROM my_table t
WHERE array_column <@ array('second', 'first') and
      array_column @> array('second', 'first')

答案 1 :(得分:1)

假设以下数据结构:

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