如何用单条SQL查询PostgreSQL评论及回复并支持SKIP/OFFSET分页
解决方案
你可以用UNION ALL合并两张表对齐后的数据,再排序分页即可,SQL写法如下:
SELECT id, comment, date_created FROM comment UNION ALL SELECT commentid AS id, content AS comment, date_created FROM comment_reply -- 排序规则保证同一条评论的主内容和所有回复聚合,且按创建时间正序排列 ORDER BY id ASC, date_created ASC -- 分页参数:LIMIT填每页展示条数,OFFSET填需要跳过的条数 LIMIT 10 OFFSET 0;
说明
- 用
UNION ALL而非UNION是因为该业务场景不存在重复数据,不需要额外去重逻辑,查询性能更高 - 合并结果集时已经对齐了字段类型和别名,返回结构和你要求的预期结果完全匹配
- 排序规则可根据业务需求调整,如果要回复倒序展示,把
date_created ASC改成date_created DESC即可 - PostgreSQL支持两种分页写法,除了上面的
LIMIT/OFFSET,也可以用标准SQL写法OFFSET x ROWS FETCH NEXT y ROWS ONLY,效果完全一致
内容的提问来源于stack exchange,提问作者Em Ha Tuan
相关产品推荐
相关产品推荐

