在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
相关产品推荐
相关产品推荐

