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

ओरेकल में रौनम का रहस्य

ROWNUM इसमें अजीब बात है कि इसे क्वेरी में किसी शर्त के हिस्से के रूप में मूल्यांकन किया जा सकता है - लेकिन यदि पंक्ति उस फ़िल्टर को पास करने में विफल रहती है, तो ROWNUM वह मान जो इसे सौंपा गया था, अगली पंक्ति के लिए फिर से उपयोग करने के लिए उपलब्ध हो जाता है।

इसका एक महत्वपूर्ण प्रभाव यह है कि यदि आप किसी ऐसी शर्त का उपयोग करते हैं जिसमें ROWNUM . शामिल नहीं है 1 का मान, आपको कभी भी मैच नहीं मिलेगा। इस स्थिति के विरुद्ध परीक्षण की जाने वाली पहली पंक्ति पंक्ति 1 होगी; लेकिन फिर यह परीक्षण में विफल हो जाएगा, इसलिए अगली पंक्ति को तब पंक्ति 1 माना जाएगा; और इसी तरह।

तो आपकी हालत ROWNUM BETWEEN 2 AND 4 कभी भी सच नहीं हो सकता।

आपको जो समाधान मिला है वह पारंपरिक है। दूसरा यह होगा कि पंक्तियों को रैंक करने के लिए विश्लेषणात्मक फ़ंक्शन का उपयोग किया जाए, फिर रैंक पर फ़िल्टर किया जाए, जैसे:

SELECT MI.* FROM (
  SELECT USER_ID,CUSTOMER_NAME, RANK() OVER (ORDER BY CREATION_DATE DESC) AS the_rank
  FROM ELEC_AUTO_MERC 
  ) MI
WHERE the_rank BETWEEN 2 AND 4;

इस उद्देश्य के लिए कई विश्लेषणात्मक कार्य - RANK, DENSE_RANK, और ROW_NUMBER - का उपयोग किया जा सकता है, और थोड़ा अलग परिणाम देगा, खासकर यदि संबंध हैं। डॉक्स देखें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एओएल/जे सेटअप टेस्ट सूट

  2. Oracle:pl-sql का उपयोग करके टैब सीमांकित पाठ फ़ाइल से डेटाबेस में रिकॉर्ड आयात करना

  3. Oracle में TABLE को कैसे छोटा करें

  4. एकाधिक सम्मिलित SQL oracle

  5. WHERE IN क्लॉज में उपयोग करने के लिए Oracle प्रक्रिया में मानों की एक सरणी भेजना