繁体   English   中英

匹配两个数组列postgresql-9.4-

[英]matching two array columns postgresql-9.4-

在同一行;

Array column 1 has {2,4,5} value  
Array column 2 has {4,8,9} value  

我想做的是查询与上面的示例匹配的两个数组列中至少匹配一个数字的表中的行; 数字4提供了此匹配项。

我如何查询表中的每一行中的每2个数组列? 我想选择匹配2个数组列的行。

如果安装intarray扩展名,这变得很容易,则可以使用&运算符获取两个数组之间的交集:

with data (col1, col2) as (
  values 
    (array[3,4,5], array[4,8,9]), 
    (array[1,2,3,4], array[6,5,1]),
    (array[1,2,3,4], array[7,8,9,10]) 
)
select col1 & col2
from data 
where cardinality(col1 & col2) > 0;

返回:

common_elements
---------------
{4}            
{1}            

编辑

要在没有扩展名或不使用bigint数组的情况下执行此操作,可以将两列都嵌套到集合中,然后对这些集合进行交集。 这需要表上的主键(或唯一)列(您没有提到)

with data (id, col1, col2) as (
  values 
    (1, array[3,4,5]::bigint[], array[4,8,9]::bigint[]), 
    (2, array[1,2,3,4]::bigint[], array[6,5,1]::bigint[]),
    (3, array[1,2,3,4]::bigint[], array[7,8,9,10]::bigint[]) 
)
select id, array_agg(element) as elements
from (
  select id, unnest(col1) as element
  from data 
  intersect
  select id, unnest(col2)
  from data
) t
group by id;

返回:

id | elements
---+---------
 1 | {4}
 2 | {1}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM