2016-07-19 20 views
5

我想了解如何只選擇SELECT查詢的第一個元素。如何在Postgresql中正確使用FETCH FIRST?

似乎很多人使用LIMIT 1來選擇第一個,但這似乎並不是最好的方法。

我在讀Postgresql文檔中的SELECT,看起來有一個FETCH語句的選項,但我在網上找不到任何示例,有人可以向我解釋如何正確使用它嗎?

+1

如果您需要示例 - 其[此處](https://www.postgresql.org/docs/current/static/sql-fetch.html)。但是,如果您只需要查詢中的第一行,那麼使用「limit」是最好的方法(在大多數情況下)。 – Abelisto

+0

@Abelisto最好?這是做它的舊的非標準方式。 –

回答

8

下面的語句是等價的:

SELECT * FROM foo LIMIT 10; 

SELECT * FROM foo FETCH FIRST 10 ROWS ONLY; 

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) 
+0

性能明智,那兩個是一樣的?他們只是做同樣的事情,但措辭不同 –

+1

是的,完全相同。純粹是句法上的差異。我已經在上面發佈了相同的解釋計劃(用於我的簡單查詢和小測試表)。 – jmelesky

相關問題