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

Oracle में डुप्लिकेट पंक्तियों को हटाने के 2 तरीके

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

पिछले उदाहरण के समान परिणाम।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle तत्काल क्लाइंट DYLD_LIBRARY_PATH त्रुटि

  2. Oracle.DataAccess.Client.OracleException ORA-03135:कनेक्शन खो गया संपर्क

  3. क्वेरी के बीच Oracle दिनांक

  4. Oracle SQL मनमाने ढंग से पंक्तियों को लौटाता है जब क्लॉज द्वारा कोई ऑर्डर नहीं किया जाता है

  5. अधिकतम तिथि के साथ रिकॉर्ड लेना