Summary:
我的数据库中有需要在客户端显示的数据。到目前为止,它还没有被分页,但现在数据已经增长到明显减慢连接速度的程度。所以我想分页它。
Setup:
- 客户端我正在使用 DataTables
- 服务器端我使用 F#
- 数据库是postgres
Problem:
我有 3 个表,表 [A、B、C]。表 A 与表 B 和 C 具有一对多关系。所以当我执行如下查询时
select * from A left join B on a.id = b.tableidb left join C on a.id = c.tableidc
我会得到 7 行,这很好。这就是我真正想要的所有数据。当我们尝试分页时,问题就真正出现了
select * from A left join B on a.id = b.tableidb left join C on a.id = c.tableidc limit 5 offset 0
正如您所看到的,它实际上只返回 5 行。但是,由于左连接,我们无法获得完整的数据集。
预期解决方案
我想说的是“给我表 A 中偏移量 0 处的 5 行,然后左连接表 B 和 C”
有没有办法在 postgres 中做到这一点?
您可以在FROM
clause.
您所要做的就是限制那里的行数:
SELECT *
FROM (SELECT * FROM A
ORDER BY a.id
LIMIT 5) AS al
LEFT JOIN b ON al.id = b.tableidb
LEFT JOIN c on al.id = c.tableidc;
Notes:
Using LIMIT
没有ORDER BY
没有多大意义。
-
如果您考虑分页,请不要使用LIMIT
and OFFSET
.
而是记住最后的a.id
您第一次选择并查询WHERE a.id > previous_a_id LIMIT 5
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)