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

एसक्यूएल में राउनम का उपयोग करके डुप्लिकेट रिकॉर्ड हटाएं

rowid का प्रयोग करें

DELETE FROM table_name a
 WHERE EXISTS( SELECT 1
                 FROM table_name b
                WHERE a.id = b.id
                  AND a.name = b.name
                  AND a.rowid > b.rowid )

बेशक, आप a.rowid < b.rowid . कर सकते हैं भी। rowid पंक्ति का केवल भौतिक पता है इसलिए इससे कोई फ़र्क नहीं पड़ता कि आप उस पंक्ति को हटाते हैं जिसमें बड़ा या छोटा पता है।

हालांकि, आपके अपेक्षित परिणाम कोई मायने नहीं रखते।

Expected Result :

        ROWNUM         ID NAME
    ---------- ---------- ----------
             4          1 leo_1
             5          2 leo_2
             6          3 leo_3

rownum परिणाम सेट का हमेशा क्वेरी समय पर असाइन किया जाता है। इसका मतलब है कि एक विशेष पंक्ति अलग rownum . के साथ दिखाई दे सकती है विभिन्न प्रश्नों में मान (या जब एक ही क्वेरी को कई बार चलाया जाता है)। rownum हमेशा अनुक्रमिक होता है इसलिए आपके पास कभी भी rownum नहीं हो सकता है बिना rownum . के भी परिणाम सेट में 4 में से एक ही परिणाम सेट में 1, 2, और 3 के मान। आप जो भी डुप्लीकेट पंक्ति हटाएंगे, आपका परिणाम होगा

अपेक्षित परिणाम :

    ROWNUM         ID NAME
---------- ---------- ----------
         1          1 leo_1
         2          2 leo_2
         3          3 leo_3

लेकिन rownum मान मनमाना हैं। यह उतना ही मान्य होगा जितना कि Oracle का वापस लौटना

अपेक्षित परिणाम :

    ROWNUM         ID NAME
---------- ---------- ----------
         1          2 leo_2
         2          3 leo_3
         3          1 leo_1


  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 SQL डेवलपर

  3. शेड्यूलिंग के लिए ऑरैकल टेबल में रिकॉर्ड डालने की जरूरत है

  4. Oracle में UPPER () फ़ंक्शन

  5. ORACLE SQL ORA-22814 विशेषता या तत्व मान प्रकार में निर्दिष्ट से बड़ा है