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