我有两个表:
ID|name1|fkey
1 |foo |345, 567
ID |name2 |
345|hello |
567|world |
789|bar |
因此,第一个表在一个单元格中有一个键列表。 如何连接这些表以获得以下结果:
ID |name2|name1
345|hello|foo
567|world|foo
789|bar | <null>
通常的联接不起作用,因为“ fkey”列包含键列表。
答案 0 :(得分:1)
使用split_part()
并退出联接
select t2.*,a.name1 from t2 left join
(select id,name1, split_part(fkey,',',1) as key1
from t1
union
select id,name1, split_part(fkey,',',2) as key1
from t1
) a on a.key=t2.id
答案 1 :(得分:0)
这是一种可怕的数据格式。但是您可以在Postgres中做到这一点:
select t2.*, t1.name1
from t2 left join
(t1 cross join lateral
regexp_split_to_table(t1.fkey, ', ') r(val)
)
on t2.id = r.val;
然后,修复您的数据结构,以便拥有正确的联结表!
答案 2 :(得分:0)
在postgresql中,如果您的列是数组,则可以
SELECT a.*
FROM table1 AS a
JOIN table2 AS b on a.id = ANY(b.column_array)