Sql 在postgres中的FROM子句中使用FETCH
所以我有一个声明:Sql 在postgres中的FROM子句中使用FETCH,sql,postgresql,subquery,Sql,Postgresql,Subquery,所以我有一个声明: SELECT jsonb_build_object( 'type', 'Feature', 'geometry', ST_AsGeoJSON(line)::jsonb, 'properties', to_jsonb(inputs) - 'line' ) as feature from (select line, line_types from table_a) inputs
SELECT jsonb_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(line)::jsonb,
'properties', to_jsonb(inputs) - 'line'
) as feature from (select line, line_types from table_a) inputs;
除了FROM子句中的select语句返回了太多的行之外,它工作得很好。所以我想一次只取x行。
我在select line上声明了一个游标,line_类型来自表_a,当我从mycur中获取FORWARD 5时;它返回前5行。但是,当我尝试用fetch替换select时,它不允许我:
SELECT jsonb_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(line)::jsonb,
'properties', to_jsonb(inputs) - 'line'
) from (FETCH 1 FROM mycur) inputs;
ERROR: syntax error at or near "FETCH"
LINE 5: ) from (FETCH 1 FROM mycur) inputs;
^
我想您不能在子查询中使用fetch?我试过了
SELECT jsonb_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(line)::jsonb,
'properties', to_jsonb(inputs) - 'line'
) as feature from (select FETCH 1 FROM mycur) inputs;
ERROR: syntax error at or near "1"
LINE 5: ) as feature from (select FETCH 1 FROM mycur) inputs...
^
我确实看到您可以在SELECT中仅使用FETCH语句,但这并不是我想要的:
SELECT jsonb_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJSON(line)::jsonb,
'properties', to_jsonb(inputs) - 'line'
) as feature from (select line, line_type from table_a fetch first 10 rows only) inputs;
现在有没有办法将从游标获取作为子查询使用?没有,在子查询中使用获取是不可能的
您应该研究如何使用键集分页:
假设表_a的主键是id
然后你从
SELECT jsonb_build_object(...) AS feature,
id
FROM (SELECT line, line_type
FROM table_a
ORDER BY id
FETCH FIRST 10 ROWS ONLY) AS inputs;
和你想的差不多
现在请记住从该查询返回的最高id;我将在下文中称之为last_id
取下下十行
SELECT jsonb_build_object(...) AS feature,
id
FROM (SELECT line, line_type
FROM table_a
WHERE id > last_id
ORDER BY id
FETCH FIRST 10 ROWS ONLY) AS inputs;
可以根据需要重复此操作以获取更多10行的页面
该方法的优点在于它使用主键索引来提高效率。这与执行类似“选择jsonb_构建_对象”这样的操作有什么区别吗。。。作为特征,id来自SELECT line,line_type来自表格a,其中id>first_id和id