You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PostgreSQL中使用unnest实现数组关联查询的问题

PostgreSQL数组关联查询解决方案

针对你遇到的数组拆分后关联表的问题,这里提供两种可行的SQL写法:

方法1:使用LATERAL JOIN(推荐)

这种写法逻辑清晰,能很好地保留主表shares的字段,适合PostgreSQL 9.3及以上版本:

SELECT l.likes_id, l.name, l.location, s.timestamp
FROM shares s
JOIN LATERAL unnest(s.likes_id_array) AS arr(likes_id) ON true
JOIN likes l ON l.likes_id = arr.likes_id
WHERE s.id = '12345_6789';

LATERAL JOIN会将shares表的每一行与unnest拆分出的数组元素行关联,这样就能拿到对应行的timestamp,再通过likes_id关联likes表,得到最终结果。

方法2:子查询关联

也可以通过子查询先拆分数组并保留timestamp,再关联likes表:

SELECT l.likes_id, l.name, l.location, s.timestamp
FROM (
    SELECT unnest(likes_id_array) AS likes_id, timestamp
    FROM shares
    WHERE id = '12345_6789'
) s
JOIN likes l ON l.likes_id = s.likes_id;

子查询先完成数组拆分,同时把timestamp字段带出,后续直接和likes表做关联即可。

两种写法都能得到你期望的结果集,推荐优先使用LATERAL JOIN,在处理复杂关联场景时更灵活易读。

内容的提问来源于stack exchange,提问作者strangecarr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:45:47