在PostgreSQL中查找两个结果集之间的公共元素

在PostgreSQL中查找两个结果集之间的公共元素,postgresql,Postgresql,我创建了以下表格 CREATE TABLE table1 ( idx SERIAL PRIMARY KEY, refs_person TEXT[], id_gps TEXT ); CREATE TABLE table2 ( idx SERIAL PRIMARY KEY, id_person TEXT, city TEXT, location INTEGER ); 我用这些信息填充了他们 表1 idx || refs_person

我创建了以下表格

CREATE TABLE table1 (
   idx SERIAL PRIMARY KEY,
   refs_person TEXT[],
   id_gps TEXT
);
CREATE TABLE table2 (
   idx SERIAL PRIMARY KEY,
   id_person TEXT,
   city TEXT,
   location INTEGER
);
我用这些信息填充了他们

表1

idx  || refs_person                           ||  id_gps
 1   || {id_per_234, id_per_456}              ||  gps_20 
 2   || {id_per_568}                          ||  gps_23
 3   || {id_per_345, id_per_334, id_per_340}  ||  gps_45
表2

idx  || id_person    || city  || location
 1   || id_per_234   || Paris ||   20
 2   || id_per_999   || York  ||   20
 3   || id_per_213   || Paris ||   20
 4   || id_per_334   || Paris ||   32
如果我想在20号地点找到巴黎的身份证

然后,如果我试图找出表1中id为gps 20的参考人员

 select refs_person from table1 where id_gps = '20';
       {id_per_234, id_per_456}  
我有一个问题,关于找到这两个结果之间的共同点

对于这个例子,我想根据234获取id。 我尝试过使用intersect语句,但没有成功


有什么想法吗?

您需要
unest
数组,最好使用
横向
连接,然后才能
相交
结果:

SELECT rp.rp
   FROM table1
      CROSS JOIN LATERAL unnest(table1.refs_person) AS rp(rp)
   WHERE id_gps = 'gps_20'
INTERSECT
SELECT id_person
   FROM table2
   WHERE city = 'Paris' AND location = 20;

     rp     
------------
 id_per_234
(1 row)

intersect有什么问题?您是
unnest(refs\u person)
还是将字符串与字符串数组进行比较?
SELECT rp.rp
   FROM table1
      CROSS JOIN LATERAL unnest(table1.refs_person) AS rp(rp)
   WHERE id_gps = 'gps_20'
INTERSECT
SELECT id_person
   FROM table2
   WHERE city = 'Paris' AND location = 20;

     rp     
------------
 id_per_234
(1 row)