2016-07-19 6 views
5

私はSELECTクエリの最初の要素だけを選択する方法を調べようとしていました。PostgresqlでFETCH FIRSTを正しく使うには?

LIMIT 1は最初のものだけを選択する人が多いようですが、それを行う最良の方法のようには見えません。

私はPostgresqlのドキュメントでSELECTを読んでいましたが、FETCH文のオプションがあるようですが、オンラインでサンプルを見つけることができませんでした。

+1

例が必要な場合は、[here](https://www.postgresql.org/docs/current/static/sql-fetch.html)を参照してください。しかし、クエリの最初の行が必要な場合は、 'limit'を使用するのが最も良い方法です(ほとんどの場合)。 – Abelisto

+0

@Abelisto best?それはそれを行うための古い非標準的な方法です。 –

答えて

8

次のステートメントは等価である:

SELECT * FROM foo LIMIT 10; 

SELECT * FROM foo FETCH FIRST 10 ROWS ONLY; 

ROWSもう少し文法的に一貫性のあるわずか1を取り出すことができるれ、ROWと交換可能です。

FETCH FIRST X ROWS ONLYはSQL標準の一部ですが、私の思い込みにはLIMITはありません。 LIMITは非常に人気があり、はるかに簡潔なので、ポストグルにもサポートされています。

の編集:2つのステートメントは構文が異なります。

=# 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

パフォーマンスは賢明ですが、その2つは同じですか?彼らはちょうど同じことをするが、異なる言葉をする –

+1

まあ、同一。純粋に構文上の違い。私は上記の私の単純なクエリと小さなテストテーブルのために同じ計画を掲示しました。 – jmelesky

関連する問題