查询 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/