Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ऑरैकल में किसी तालिका से रिकॉर्ड भी कैसे चुनें?

यह काम नहीं कर रहा है क्योंकि:पहली पंक्ति के लिए ROWNUM है 1 और, इस मामले में, MOD(ROWNUM,2) है 1 और चूंकि आपका WHERE कथन है MOD(ROWNUM,2)=0 फिर यह घटकर 1=0 . हो जाता है और पंक्ति को त्याग दिया जाता है। उसके बाद अगली पंक्ति का परीक्षण ROWNUM . के विरुद्ध किया जाएगा 1 का (चूंकि पिछली पंक्ति अब आउटपुट में नहीं है और इसमें कोई पंक्ति संख्या नहीं होगी), जो फिर से परीक्षण में विफल हो जाएगा और त्याग दिया जाएगा। दोहराएँ, विज्ञापन रुकना और सभी पंक्तियाँ विफल हो जाती हैं WHERE परीक्षण करते हैं और त्याग दिए जाते हैं।

यदि आप WHERE MOD(ROWNUM,2)=1 का उपयोग करके इस तरह से विषम पंक्तियों को प्राप्त करने का प्रयास करते हैं तो यह केवल पहली पंक्ति और दूसरी लौटाएगा, और बाद में, पंक्तियां परीक्षण में विफल हो जाएंगी और कभी भी क्वेरी में शामिल नहीं की जाएंगी।

जैसा कि विजयकुमार हडाल्गी सुझाव देते हैं, आपको उप-क्वेरी में ROWNUM का चयन करना होगा (जहां यह सभी पंक्तियों को बिना किसी खंड के प्रतिबंधित कर सकता है) और फिर बाहरी क्वेरी में पंक्तियों को प्रतिबंधित करने के लिए परीक्षण करें:

SELECT ename, job
FROM   (
  SELECT ename,
         job,
         ROWNUM AS row_id             -- Generate ROWNUM second.
  FROM   (
    SELECT ename, job
    FROM   Emp
    ORDER BY ename                    -- ORDER BY first.
  )
)
WHERE  MOD( row_id, 2 ) = 0;          -- Filter third.

SQLFIDDLE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक Oracle लेखा परीक्षा जीवित रहना

  2. SQL - विशिष्ट मान सम्मिलित करने वाला कथन ढूँढें

  3. JDBC कनेक्शन डिफ़ॉल्ट ऑटोकॉमिट व्यवहार

  4. मैं SQLPLUS के साथ कमांड लाइन पर PL/SQL स्क्रिप्ट के लिए तर्क कैसे पास करूं?

  5. मैं पीएल/एसक्यूएल में वेरिएबल कैसे घोषित और उपयोग कर सकता हूं जैसे मैं टी-एसक्यूएल में करता हूं?