arrays - 具有可选子集的无序集(数组)上的匹配表

标签 arrays postgresql join multidimensional-array

我正在尝试根据一组特征匹配两个表中的观察结果。

Table1:
id1;set1
A;{1,2,3,4}
B;{6,9,4,5}

Table2:
id2;set2
F;{1,2,3,4}
G;{7,6,2,4}
H;{6,{1,9},4,5}

理论上集合是无序的,表1中集合的每个元素都应该匹配表2中的一个元素,但是当元素是子集时,表1中的元素应该属于表2中的子集。

结果应该是:

匹配表: id1;id2 一个;F B;H

表 1 中的“A”与表 2 中的“F”平凡匹配。 匹配“B”、“H”比较复杂。 set1 的第二个元素“1”属于“{1,9}”,即“H”中的子集,这样就全部匹配了。

我应该如何在 Postgresql 中对这些数据建模并执行此匹配?

PS:忽略带有子集的集合的情况 H,我将 set1 和 set2 创建为数组,对它们进行排序,然后在数组字段上对表进行内部联接。

最佳答案

安装 intarray您可以在其中找到最适合您需要的 query_int 类型的扩展。

create extension if not exists intarray;

create table table1 (id1 text, set1 int[]);
insert into table1 values
('A', '{1,2,3,4}'),
('B', '{6,9,4,5}');

create table table2 (id2 text, set2 query_int);
insert into table2 values
('F', '1 & 2 & 3 & 4'),
('G', '7 & 6 & 2 & 4'),
('H', '6 & (1 | 9) & 4 & 5');

select id1, id2
from table1
join table2
on set1 @@ set2

 id1 | id2
-----+-----
 A   | F
 B   | H
(2 rows)

关于arrays - 具有可选子集的无序集(数组)上的匹配表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33110384/

相关文章:

c++ - 匹配2个数组中的数字c++

javascript - 如果 JavaScript 字符串以连字符开头,则计算出现次数

sql - 任何想法为什么这个连接查询执行表扫描,如果有办法我可以消除它?

database - Postgresql 查询优化 不允许内部/外部连接

c - 数组不打印?

arrays - 为什么使用 C 引用这个 char 数组会导致堆栈崩溃?

python - 杀死 postgres 中的特定 sql 查询

arrays - 查找包含另一个数组子集的数组而不使用 @> 与 postgreSQL

mysql - 连接后显示表的所有行

sql - 在 SQL 表上使用哪种连接