在文档页面上 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[] );
错误:无法将整数转换为整数[]
array expression
的文档int[]
答案 0 :(得分:1)
从子查询检查数组构造函数:https://www.postgresql.org/docs/current/static/sql-expressions.html#SQL-SYNTAX-ARRAY-CONSTRUCTORS
第二个查询有效,因为any
的一种形式接受一个数组:https://www.postgresql.org/docs/current/static/functions-comparisons.html#AEN21104
any
的子查询形式:https://www.postgresql.org/docs/current/static/functions-subquery.html#FUNCTIONS-SUBQUERY-ANY-SOME