Postgresql,定义联接内的限制?

Postgresql,定义联接内的限制?,postgresql,Postgresql,我有以下表格: library |id|... books |id|library_id (fk)|... permissions |user_id (fk)|library_id(fk)|read bool| ... 我想找到某个用户(id)可以在该用户有阅读权限的任何图书馆中看到的最近10本书 图书馆可以有很多书 用户可以使用readbool true或false对每个库拥有一条权限记录 我不确定如何将每个图书馆的图书结果限制在某个我想要动态设置的限制内 通常我会这

我有以下表格:

library
    |id|...
books
    |id|library_id (fk)|...
permissions
    |user_id (fk)|library_id(fk)|read bool| ...
我想找到某个用户(id)可以在该用户有阅读权限的任何图书馆中看到的最近10本书

图书馆可以有很多书

用户可以使用
read
bool true或false对每个库拥有一条权限记录

我不确定如何将每个图书馆的图书结果限制在某个我想要动态设置的
限制内

通常我会这样做:

select b.id,
       l.id
from book b
inner join library l on l.id = b.library_id
inner join permissions p on l.id = p.library_id
where p.user_id=${user.id} and p.read=true
order by b.created_at desc
我不知道如何在每个图书馆只归还用户访问过的最近的10本书


如何设置每个库的限制?

您可以执行横向连接:

select b.id,
       l.id
from permissions p
inner join library l on l.id = p.library_id
cross join lateral 
    (select * from book where library_id=l.id order by created_at desc LIMIT 10) b
where p.user_id=${user.id} and p.read=true

效果很好。非常感谢。