我已经创建了以下表格。
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 的 id_person 。
select id_person from table2 where city = 'Paris' and location = '20';
id_per_234
id_per_213
然后,如果我尝试为表1找出 id_gps 20 的 refs_person
select refs_person from table1 where id_gps = '20';
{id_per_234, id_per_456}
我在寻找这两个结果之间的共同点时遇到了一个问题。
对于此示例,我想获取 id_per_234 。 我尝试使用 intersect 语句没有成功。
有什么想法吗?
答案 0 :(得分:0)
您需要unnest
数组,最好使用LATERAL
连接,然后才能INTERSECT
结果:
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)