如何将where语句写成复合类型?

时间:2016-09-13 11:38:59

标签: postgresql

假设我创建了一个类型

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是一个数组。但我不知道如何编写查询以使用任何“密钥”

1 个答案:

答案 0 :(得分:1)

您可以使用unnest函数,它基本上将数组转换为表格:

select * from test where exists(select 1 from unnest(a) as t where (t).key=5);