什么是PostgreSQL ANY / SOME语法?

时间:2017-05-25 17:49:36

标签: postgresql

在文档页面上 https://www.postgresql.org/docs/9.6/static/functions-comparisons.html

ANY / SOME描述如下: expression operator ANY (array expression)

给出表格:

create table ints1(
    id int
);
create table arrays1(
    ints int[]
);

和查询:

select id from ints1 where id = any (array[1, 2]);

按预期工作,因为这里解释了数组文字语法 https://www.postgresql.org/docs/9.6/static/arrays.html

select id from ints1 where id = any (select id from ints1 where id in (1, 2));

正在运作,但为什么呢? 所以我想也许有从1列行集到数组类型的智能类型转换,并尝试了以下查询:

insert into arrays1 (ints) values ( select id from ints1 );

无法正常工作 - 选择

附近的语法错误

然后尝试了这个:

insert into arrays1 (ints) values ( ARRAY(select id from ints1) );

这工作并将正确的值插入到arrays表中,但我没有找到ARRAY(..)表达式在文档中的作用。

我想也许ARRAY(..)再次是一个类型转换操作符,并尝试使用::int[]

insert into arrays1 (ints) values ( (select id from ints1)::int[] );

错误:无法将整数转换为整数[]

  1. 任何人都可以指向定义array expression的文档
  2. 澄清为什么第二次查询运行正常且第三次失败
  3. 阐明ARRAY(..)表达式的工作原理,以及与int[]
  4. 类型的差异