我试图根据一组特征匹配两个表中的观察结果。
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中的子集。
结果应该是:
MATCH_TABLE:
id1;id2
A;F
B;H
" A"在表1中匹配" F"在表2中,很简单。 匹配" B"," H"更复杂。 set1的第二个元素," 1"属于" {1,9}"," H"中的子集,这就是全部匹配。
我应该如何在Postgresql中建模这些数据并执行此匹配?
PS:忽略具有子集的集合的情况H,我创建了set1和set2作为数组,对它们进行了排序,并且INNER在数组字段上加入了表。
答案 0 :(得分:2)
安装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)