Postgresqlでrownumをシミュレートする方法はありますか?
Postgresql> 8.4
SELECT
row_number() OVER (ORDER BY col1) AS i,
e.col1,
e.col2,
...
FROM ...
Oracle ROWNUMに近いソリューションをPostgres 9.1でテストしました。
select row_number() over() as id, t.*
from information_schema.tables t;
Postgresqlには制限があります。
Oracleのコード:
select *
from
tbl
where rownum <= 1000;
postgresqlのコードでも同じです:
select *
from
tbl
limit 1000
数字を戻すだけの場合は、これを試してください。
create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1
from sometable
)inline_v1;
Inline_v1 SQLに順序を追加して、ROWNUMがデータに対して何らかの意味を持つようにすることができます。
select nextval('temp_seq') as ROWNUM, c1
from sometable
ORDER BY c1 desc;
最速ではないかもしれませんが、本当に必要な場合はオプションです。
Postgresqlには、OracleのROWNUMに相当するものがありません。多くの場合、クエリでLIMITとOFFSETを使用して同じ結果を得ることができます。
一意のキーがある場合は、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 |
行番号-1を選択するためにオフセットを使用して制限句を使用します。
制限1オフセット7