我看到自己不时遇到相同类型的查询,因为它限制了结果的数量。我有一个通知表,需要将多个通知分组在一起,这样我才能列出“像您的评论一样的x和y人”列表。
一些记录显示我的意思:
notification_id | fk_comment_id | from_user_id | to_user_id
-----------------------------------------------------------
1 1 12 13
2 1 25 13
3 2 23 13
假设我是13位用户,我想获取最近的10条通知(按fk_comment_id分组),但是我想在1条fk_comment_id上获取 all 条通知,例如,如果fk_comment_id有2条通知(如上),查询结果应计11条记录(因为它必须包含有关1条comment_id的所有通知)
目前有效的查询是cte:
with cte as
(select fk_comment_id from notifications
where to_user_id = 13
group by fk_comment_id
order by fk_comment_id desc
limit 10 offset 0)
select * from notifications where fk_comment_id in (select fk_comment_id from cte)
但这还能更有效地编写吗?例如递归查询?