Oracle डेटाबेस में डुप्लिकेट पंक्तियों को हटाने के लिए निम्नलिखित विकल्पों का उपयोग किया जा सकता है।
ये उदाहरण डुप्लिकेट पंक्तियों को हटाते हैं लेकिन एक रखते हैं। इसलिए यदि उदाहरण के लिए तीन समान पंक्तियाँ हैं, तो यह उनमें से दो को हटा देती है और एक को रख देती है। इसे अक्सर टेबल को डी-डुपिंग कहा जाता है।
नमूना डेटा
मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:
SELECT * FROM Pets;
परिणाम:
PETID PETNAME PETTYPE 1 Wag Dog 1 Wag Dog 2 Scratch Cat 3 Tweet Bird 4 Bark Dog 4 Bark Dog 4 Bark Dog
हम देख सकते हैं कि पहली दो पंक्तियाँ डुप्लीकेट हैं, जैसा कि अंतिम तीन पंक्तियाँ हैं।
इस मामले में, सभी कॉलम डुप्लिकेट हैं। कोई प्राथमिक कुंजी कॉलम नहीं है। आम तौर पर, कोई PetId
. की अपेक्षा कर सकता है कॉलम को प्राथमिक कुंजी माना जाता है, लेकिन इसमें डुप्लिकेट मान होते हैं और इसलिए यह प्राथमिक कुंजी नहीं हो सकती है।
यदि यह प्राथमिक कुंजी थी, तो इसमें सभी पंक्तियों में अद्वितीय मान होंगे, और कोई डुप्लीकेट नहीं होगा।
भले ही, प्राथमिक कुंजी न होने पर भी डुप्लिकेट पंक्तियों को खोजने और हटाने के लिए नीचे दो विकल्प दिए गए हैं।
विकल्प 1
उपरोक्त तालिका से डुप्लिकेट पंक्तियों को हटाने का एक विकल्प यहां दिया गया है:
DELETE FROM Pets
WHERE EXISTS (
SELECT 1 FROM Pets p2
WHERE Pets.PetName = p2.PetName
AND Pets.PetType = p2.PetType
AND Pets.rowid > p2.rowid
);
SELECT * FROM Pets;
परिणाम:
3 row(s) deleted. PETID PETNAME PETTYPE 1 Wag Dog 2 Scratch Cat 3 Tweet Bird 4 Bark Dog
तालिका को अब डी-डुप्लिकेट किया गया है। तीन पंक्तियाँ हटा दी गईं, और चार शेष रह गईं।
हमारे कुत्ते "वैग" के लिए डुप्लिकेट पंक्तियों में से एक को हटा दिया गया है और दूसरी एक बनी हुई है। "बार्क" के लिए दो डुप्लिकेट पंक्तियों को भी हटा दिया गया है।
Oracle का rowid
स्यूडोकॉलम ने हमें इस डी-डुप्ली ऑपरेशन को करने की अनुमति दी। हम यह निर्धारित करने में सक्षम थे कि कौन सी पंक्तियों को हटाना है।
इसके काम करने का तरीका यह है कि Oracle डेटाबेस की प्रत्येक पंक्ति में एक rowid
होता है स्यूडोकॉलम जो पंक्ति का पता देता है। rowid
तालिका में पंक्तियों के लिए एक विशिष्ट पहचानकर्ता है, और आमतौर पर इसका मान विशिष्ट रूप से डेटाबेस में एक पंक्ति की पहचान करता है। इसलिए, हम प्रत्येक पंक्ति की पहचान तब भी कर सकते हैं जब हमारे पास प्राथमिक कुंजी या कोई अन्य विशिष्ट आईडी फ़ील्ड न हो।
हालांकि, यह ध्यान रखना महत्वपूर्ण है कि एक ही क्लस्टर में एक साथ संग्रहीत विभिन्न तालिकाओं में पंक्तियों में एक ही rowid
हो सकता है ।
विकल्प 2
यह मानते हुए कि तालिका को उसके मूल डेटा (डुप्लिकेट पंक्तियों सहित) के साथ पुनर्स्थापित कर दिया गया है, यहां डुप्लिकेट पंक्तियों को हटाने का एक और विकल्प है।
DELETE FROM Pets
WHERE rowid > (
SELECT MIN(rowid) FROM Pets p2
WHERE Pets.PetName = p2.PetName
AND Pets.PetType = p2.PetType
);
SELECT * FROM Pets;
परिणाम:
PETID PETNAME PETTYPE 1 Wag Dog 2 Scratch Cat 3 Tweet Bird 4 Bark Dog
पिछले उदाहरण के समान परिणाम।