क्या पोस्टग्रेस्क्ल में राउनम अनुकरण करने का कोई तरीका है?पोस्टग्रेस्क्ल में रोउनम
उत्तर
Postgresql> 8,4
SELECT
row_number() OVER (ORDER BY col1) AS i,
e.col1,
e.col2,
...
FROM ...
पोस्टग्रेस्क्ल में ओरेकल के ROWNUM के बराबर नहीं है। कई मामलों में आप अपनी क्वेरी में LIMIT और OFFSET का उपयोग करके एक ही परिणाम प्राप्त कर सकते हैं।
-1 गलत हो रहा है यही कारण है, स्वीकार किए जाते हैं जवाब ... –
+1 ROWNUM और ROW_NUMBER() से अधिक() नहीं बिल्कुल एक ही –
आप सिर्फ एक संख्या वापस आने के लिए यह कोशिश करना चाहते हैं।
create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1
from sometable
)inline_v1;
आप तो अपने ROWNUM अपने डेटा के लिए कुछ अनुक्रमिक अर्थ नहीं है inline_v1 एसक्यूएल करने के लिए द्वारा एक आदेश जोड़ सकते हैं।
select nextval('temp_seq') as ROWNUM, c1
from sometable
ORDER BY c1 desc;
सबसे तेज़ नहीं हो सकता है, लेकिन यदि आपको वास्तव में उनकी आवश्यकता है तो यह एक विकल्प है।
मैं सिर्फ Postgres 9.1 एक समाधान है जो ओरेकल ROWNUM के करीब है में परीक्षण किया है:
select row_number() over() as id, t.*
from information_schema.tables t;
मैंने इसे 8.4 में परीक्षण किया और यह भी वहां काम करता है। – Mac
ध्यान दें कि यह बाहरी क्वेरी में 'ORDER BY' का सम्मान नहीं करेगा। –
Postgresql सीमा है।
Oracle की कोड:
select *
from
tbl
where rownum <= 1000;
Postgresql के कोड में एक ही:
select *
from
tbl
limit 1000
ऑफसेट के साथ, सीमा clausule का उपयोग पंक्ति संख्या -1, इसलिए यदि चयन करने के लिए यू चाहते संख्या 8 पंक्ति मिल इसलिए का उपयोग करें:
सीमा 1 ऑफसेट 7
आप एक अद्वितीय कुंजी है, तो आप उपयोग कर सकते हैं 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 |
सावधान रहें रहे हैं। यह ओरेकल के रोउनम के समान है, लेकिन यह थोड़ा अलग है। ओरेकल का राउनम डिस्क से पंक्ति पढ़ने के समय असाइन किया गया है, जबकि यह row_number() आपके – Royce
में क्या है, इस पर निर्भर करता है कि गति अंतर के बारे में क्या? – Nashev