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