在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)