2016-07-19 11 views
5

Ich habe versucht, herauszufinden, wie nur das erste Element der SELECT-Abfrage auswählen.Wie man FETCH FIRST in Postgresql richtig benutzt?

Es scheint, dass viele Leute LIMIT 1 benutzen, um nur den ersten zu wählen, aber das scheint nicht der beste Weg zu sein.

Ich habe gerade gelesen in den Postgresql-Dokumenten gelesen, und es scheint, es gibt eine Option für eine FETCH-Anweisung, aber ich kann keine Beispiele online finden, könnte mir jemand erklären, wie man es richtig benutzt?

+1

Wenn Sie beispielsweise müssen - seine [hier] (https://www.postgresql.org/docs/current/static/sql-fetch.html). Wenn Sie jedoch nur eine oder mehrere erste Zeile (n) aus der Abfrage benötigen, ist die Verwendung von "limit" (in den meisten Fällen) der beste Weg. – Abelisto

+0

@Abelisto am besten? Es ist der alte, nicht standardisierte Weg, es zu tun. –

Antwort

8

Die folgenden Aussagen sind äquivalent:

SELECT * FROM foo LIMIT 10; 

und

SELECT * FROM foo FETCH FIRST 10 ROWS ONLY; 

ROWS ist austauschbar mit ROW, die nur 1 ein wenig mehr grammatisch konsistent macht holen.

FETCH FIRST X ROWS ONLY ist Teil des SQL-Standards, während, zu meiner Erinnerung, LIMIT nicht ist. LIMIT ist sehr beliebt, und viel knapper, so wird es auch von Postgres unterstützt.

Bearbeitet, um hinzuzufügen: Die zwei Anweisungen sind nur syntaktisch unterschiedlich. Sie erzeugen genau die gleichen Pläne:

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

Und leistungsmäßig sind diese beiden gleich? Sie tun nur das gleiche, aber unterschiedliche Formulierung –

+1

Ja, identisch. Nur ein syntaktischer Unterschied. Ich habe oben die identischen EXPLAIN-Pläne (für meine einfache Abfrage und kleine Testtabelle) gepostet. – jmelesky