Gibt es eine Möglichkeit, Rownum in postgresql zu simulieren?
postgresql
rownum
Nascar
quelle
quelle
Ich habe gerade in Postgres 9.1 eine Lösung getestet, die Oracle ROWNUM nahe kommt:
select row_number() over() as id, t.* from information_schema.tables t;
quelle
ORDER BY
in der äußeren Abfrage nicht berücksichtigt.Postgresql haben Limit.
Oracle-Code:
select * from tbl where rownum <= 1000;
Gleiches gilt für Postgresqls Code:
select * from tbl limit 1000
quelle
Wenn Sie nur möchten, dass eine Nummer zurückkommt, versuchen Sie dies.
create temp sequence temp_seq; SELECT inline_v1.ROWNUM,inline_v1.c1 FROM ( select nextval('temp_seq') as ROWNUM, c1 from sometable )inline_v1;
Sie können der SQL inline_v1 eine Reihenfolge hinzufügen, damit Ihr ROWNUM eine sequentielle Bedeutung für Ihre Daten hat.
select nextval('temp_seq') as ROWNUM, c1 from sometable ORDER BY c1 desc;
Vielleicht nicht die schnellste, aber es ist eine Option, wenn Sie sie wirklich brauchen.
quelle
Postgresql hat kein Äquivalent zu Oracle ROWNUM. In vielen Fällen können Sie das gleiche Ergebnis erzielen, indem Sie LIMIT und OFFSET in Ihrer Abfrage verwenden.
quelle
Verwenden Sie die Grenzwertklausel mit dem Versatz, um die Zeilennummer -1 zu wählen. Wenn Sie also die Zeile mit der Nummer 8 erhalten möchten, verwenden Sie:
Limit 1 Offset 7
quelle
Wenn Sie einen eindeutigen Schlüssel haben, können Sie diesen verwenden
COUNT(*) OVER ( ORDER BY unique_key ) as ROWNUM
SELECT t.*, count(*) OVER (ORDER BY k ) ROWNUM FROM yourtable t; | k | n | rownum | |---|-------|--------| | a | TEST1 | 1 | | b | TEST2 | 2 | | c | TEST2 | 3 | | d | TEST4 | 4 |
DEMO
quelle