假设我创建了一个类型
CREATE TYPE testpair AS (key int, value int);
并将其放在表格中
create table test(id SERIAL PRIMARY KEY, a testpair[]);
使用这些测试值
insert into test(a) values (ARRAY[(1,2)::testpair]), (ARRAY[(5,9)::testpair]), (ARRAY[(4,16)::testpair]), (ARRAY[(9, 1)::testpair]);
如果我写这个
,我会得到一个结果select * from test where (4,16)::testpair = ANY(a);
如果我想知道这些对中的任何一对是以4开头还是对于所有>= 9
对,我如何编写查询?我知道我可以写select ((5,8)::testpair).key;
来获得5但是以下是错误的
select * from test where 5 = ANY((a).key);
给出的错误是
ERROR: column notation .key applied to type testpair[], which is not a composite type
这是有道理的,因为a
是一个数组。但我不知道如何编写查询以使用任何“密钥”
答案 0 :(得分:1)
您可以使用unnest
函数,它基本上将数组转换为表格:
select * from test where exists(select 1 from unnest(a) as t where (t).key=5);