尝试查询表中的值,其中两个数组具有相同的值,但不一定按相同的顺序排列。
给出:值为
的列drop
预期:
{'first', 'second'}
预期:
SELECT * FROM my_table WHERE array_column = {'second', 'first'}
结果1
SELECT * FROM my_table WHERE array_column = {'second'}
结果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 |