如何在Postgresql中正确使用FETCH FIRST?

Tyl*_*ong 16 postgresql

我试图找出如何只选择SELECT查询的第一个元素.

似乎很多人使用LIMIT 1来仅选择第一个,但这似乎不是最好的方法.

我正在阅读Postgresql文档中的SELECT,似乎有一个FETCH语句的选项但我在网上找不到任何例子,有人可以向我解释如何正确使用它吗?

jme*_*sky 22

以下陈述是等效的:

SELECT * FROM foo LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

和

SELECT * FROM foo FETCH FIRST 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)

ROWS是可以互换的ROW,这使得1在语法上更加一致.

FETCH FIRST X ROWS ONLY是SQL标准的一部分,而对于我的记忆,LIMIT则不是.LIMIT非常受欢迎,而且更加简洁,所以它也得到了postgres的支持.

编辑添加:这两个语句只是语法上不同.他们产生完全相同的计划:

=# explain select * from foo fetch first 10 row only;
                         QUERY PLAN                          
-------------------------------------------------------------
 Limit  (cost=0.00..0.22 rows=10 width=68)
   ->  Seq Scan on foo  (cost=0.00..18.50 rows=850 width=68)

=# explain select * from foo limit 10;
                         QUERY PLAN                          
-------------------------------------------------------------
 Limit  (cost=0.00..0.22 rows=10 width=68)
   ->  Seq Scan on foo  (cost=0.00..18.50 rows=850 width=68)
Run Code Online (Sandbox Code Playgroud)

  • 没错,一模一样。纯粹是句法差异。我已经在上面发布了相同的解释计划(用于我的简单查询和小型测试表)。 (2认同)