2016-07-19 17 views
5

Próbowałem dowiedzieć się, jak wybrać tylko pierwszy element zapytania SELECT.Jak poprawnie używać FETCH FIRST w PostgreSQL?

Wygląda na to, że wielu ludzi używa LIMIT 1, aby wybrać tylko pierwszy, ale nie wydaje się to najlepszym sposobem na zrobienie tego.

Czytałem na SELECT w dokumentach PostgreSQL i wydaje się, że istnieje opcja dla instrukcji FETCH, ale nie mogę znaleźć żadnych przykładów w Internecie, czy ktoś mógłby mi wytłumaczyć, jak poprawnie z niej korzystać?

+1

Jeśli potrzebujesz przykład - jego [tutaj] (https://www.postgresql.org/docs/current/static/sql-fetch.html). Ale jeśli potrzebujesz kwerendy z pierwszego rzędu, najlepiej użyć 'limit' (w większości przypadków). – Abelisto

+0

@Abelisto najlepszy? to stary niestandardowy sposób na zrobienie tego. –

Odpowiedz

8

Poniższe stwierdzenia są równoważne:

SELECT * FROM foo LIMIT 10; 

i

SELECT * FROM foo FETCH FIRST 10 ROWS ONLY; 

ROWS jest zamiennie z ROW, co sprawia, że ​​zaledwie 1 ściągam trochę bardziej gramatycznie spójne.

FETCH FIRST X ROWS ONLY jest częścią standardu SQL, podczas gdy, zgodnie z moim wspomnieniem, LIMIT nie jest. LIMIT jest bardzo popularny i znacznie bardziej zwięzły, więc jest wspierany przez PostgreSQL.

Edytowane w celu dodania: Te dwie instrukcje mają tylko inną składnię. generują one dokładnie takie same plany:

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

A jeśli chodzi o wydajność, to te dwie są takie same? Po prostu robią to samo, ale inaczej brzmią: –

+1

Tak, identyczne. To czysto syntaktyczna różnica. Opublikowalem powyzsze identyczne plany wyjasnia (dla mojego prostego zapytania i niewielkiej tabeli testowej). – jmelesky

Powiązane problemy