这是一个简单的用例,但是很难使用数组在postgres中进行联接。
我有两张table:
table: shares
id | likes_id_array timestamp share_site
-----------------+-----------------+----------+-----------
12345_6789 | [xxx, yyy , zzz]| date1 | fb
abcde_wxyz | [vbd, fka, fhx] | date2 | tw
table: likes
likes_id | name | location
--------+-------+----------+-----
xxx | aaaa | nice
fpg | bbbb | dfpb
yyy | mmmm | place
dhf | cccc | fiwk
zzz | dddd | here
desired - a result set based on shares.id = 12345_6789:
likes_id | name | location | timestamp
--------+-------+----------+------------+-----------
xxx | aaaa | nice | date1
yyy | mmmm | place | date1
zzz | dddd | here | date1
第一步是对like_id_array使用unnest():
SELECT unnest(likes_id_array) as i FROM shares
WHERE id = '12345_6789'
但是我不知道如何将这个结果集与Like_id上的Like表结合起来。任何帮助都将不胜感激!
4条答案
按热度按时间jei2mxaa1#
您可以使用Like标识符用查询创建一个
CTE
,然后与Like表进行常规的内部连接Demo
jdzmm42g2#
您可以使用
ANY
:e5njpo683#
您可以使用子查询或CTE来执行此操作,但最简单的方法是不在
SELECT
子句中调用unnest
函数,而是在FROM
子句中将其作为表表达式调用:svujldwt4#
可以将
jsonb_array_elements_text
与(隐式)lateral join一起使用:产出:
或者,如果要使横向联接显式(请注意添加了关键字
LATERAL
):