arrays - 如何将两个数组的交集结果转换​​为整数数组从SQL查询到postgresql中的整数数组

标签 arrays postgresql rails-postgresql

查询 1:

SELECT ARRAY(select id from contacts where id = 0)::INT[],
       ARRAY[]::INT[],
       ARRAY(SELECT id FROM contacts WHERE id = 0)::INT[] = ARRAY[]::int[]

产生这个结果:

int4    array   ?column?                                                                    
{}      {}      TRUE

查询 2:

SELECT (ARRAY(SELECT id FROM contacts WHERE id = 0)::INT[]
      & ARRAY(select id from contacts where id = 0)::INT[]),
        ARRAY[]::INT[],
       (ARRAY(SELECT id FROM contacts WHERE id = 0)::INT[]
      & ARRAY(SELECT id FROM contacts WHERE id = 0)::INT[]) = ARRAY[]::int[]

产生不同的结果:

?column?    array   ?column?                                                            
{}              {}      FALSE

为什么不同?

是否有任何其他方法可以将空整数数组与第二个查询中的两个数组的交集结果进行比较?

最佳答案

标准 PostgreSQL 不支持 ARRAY 交集运算符。您必须已经安装了 additional module intarray .

你的问题归结为:
两个空整数数组的交集产生一个空整数数组。为什么此查询会产生 false

SELECT ('{}'::int[] & '{}'::int[]) = '{}'::int[]

或者用其他语法,意思相同:

SELECT (ARRAY[]::int[] & ARRAY[]::int[]) = ARRAY[]::int[]

虽然这会产生 true:

SELECT '{}'::int[] = '{}'::int[]

是的,这是一个非常好的问题


对于它的值(value),我可以解释其中的区别:

SELECT array_dims('{}'::int[])
<NULL>

SELECT array_dims('{}'::int[] & '{}'::int[])
[1:0]

换句话说,第一个只是一个空数组,而第二个是一个包含空元素的一维数组。

这可能非常令人困惑。例如,请参阅此线程关于 how to treat string_to_array() with empty output .
我不确定 & 运算符在这里做了正确的事情。

关于arrays - 如何将两个数组的交集结果转换​​为整数数组从SQL查询到postgresql中的整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997157/

相关文章:

postgresql - 在 Rails 4 中查询 PostgreSQL 多维数组数据类型

ruby-on-rails - 大量插入或更新 postgresql

javascript - php 数组中转换 json 字符串时出现问题

arrays - Postgresql 函数 - 解析输入的 json,构建并返回 json 对象

javascript - 使用 Angular.fromJson 数据数组始终处理为字符串而不是数组

更新列出的所有列时的 Postgresql 触发器

ruby-on-rails - 新分配的序列不起作用

c++数组,如何在同一数组中添加新的一行值?

python - Mac 上安装 Odoo 无法执行命令 LESSC

PostgreSQL - 从函数返回 n 大小的 varchar