我有一个限制和偏移量的查询。例如:
select * from tbl
limit 10 offset 100;
如何跟踪记录的数量,而不运行第二个查询,如:
select count(*) from tbl;
我认为this回答了我的问题,但我需要它用于PostgreSQL。有什么想法吗?
答案 0 :(得分:4)
我找到了一个解决方案,我想分享一下。我所做的是 - 我使用过滤器从我的真实表创建一个临时表,然后我从临时表中选择一个限制和偏移(没有限制,所以性能很好),然后从中选择count(*)临时表(再次没有过滤器),然后我需要的其他东西,最后 - 我放下临时表。
select * into tmp_tbl from tbl where [limitations];
select * from tmp_tbl offset 10 limit 10;
select count(*) from tmp_tbl;
select other_stuff from tmp_tbl;
drop table tmp_tbl;
答案 1 :(得分:0)
我没有尝试过,但是从documentation中标题为Obtaining the Result Status
的部分,您可以使用GET DIAGNOSTICS
命令来确定命令的效果。
GET DIAGNOSTICS number_of_rows = ROW_COUNT;
来自文档:
此命令允许检索系统状态指示器。每个物品 是一个关键词,用于识别要分配给的状态值 指定变量(应该是要接收的正确数据类型) 它)。当前可用的状态项为ROW_COUNT,其数量为 由发送到SQL引擎的最后一个SQL命令处理的行, 和RESULT_OID,最近插入的最后一行的OID SQL命令。请注意,RESULT_OID仅在INSERT之后有用 命令进入包含OID的表。