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
效果很好。非常感谢。