我想了解如何只選擇SELECT查詢的第一個元素。如何在Postgresql中正確使用FETCH FIRST?
似乎很多人使用LIMIT 1來選擇第一個,但這似乎並不是最好的方法。
我在讀Postgresql文檔中的SELECT,看起來有一個FETCH語句的選項,但我在網上找不到任何示例,有人可以向我解釋如何正確使用它嗎?
我想了解如何只選擇SELECT查詢的第一個元素。如何在Postgresql中正確使用FETCH FIRST?
似乎很多人使用LIMIT 1來選擇第一個,但這似乎並不是最好的方法。
我在讀Postgresql文檔中的SELECT,看起來有一個FETCH語句的選項,但我在網上找不到任何示例,有人可以向我解釋如何正確使用它嗎?
下面的語句是等價的:
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)
性能明智,那兩個是一樣的?他們只是做同樣的事情,但措辭不同 –
是的,完全相同。純粹是句法上的差異。我已經在上面發佈了相同的解釋計劃(用於我的簡單查詢和小測試表)。 – jmelesky
如果您需要示例 - 其[此處](https://www.postgresql.org/docs/current/static/sql-fetch.html)。但是,如果您只需要查詢中的第一行,那麼使用「limit」是最好的方法(在大多數情況下)。 – Abelisto
@Abelisto最好?這是做它的舊的非標準方式。 –