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

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

SQLite में डुप्लिकेट पंक्तियों को हटाने के लिए निम्न विकल्पों का उपयोग किया जा सकता है।

ये उदाहरण डुप्लिकेट पंक्तियों को हटाते हैं लेकिन एक रखते हैं। इसलिए यदि उदाहरण के लिए तीन समान पंक्तियाँ हैं, तो यह उनमें से दो को हटा देती है और एक को रख देती है। इसे अक्सर टेबल को डी-डुपिंग कहा जाता है।

नमूना डेटा

मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:

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

तालिका को डी-डुप्लिकेट करने से पहले, हम निम्न क्वेरी का उपयोग करके देख सकते हैं कि कौन सी पंक्ति/पंक्तियों को हटा दिया जाएगा:

SELECT * FROM Pets
WHERE EXISTS (
  SELECT 1 FROM Pets p2 
  WHERE Pets.PetName = p2.PetName
  AND Pets.PetType = p2.PetType
  AND Pets.rowid > p2.rowid
);

परिणाम:

PetId  PetName  PetType
-----  -------  -------
1      Wag      Dog    
4      Bark     Dog    
4      Bark     Dog    

यह हमें दिखाता है कि जब हम अगले चरण में तालिका को डी-डुप्लिकेट करेंगे तो तीन पंक्तियां हटा दी जाएंगी।

डुप्लिकेट मानों को हटाने के लिए, हम SELECT * . को बदलकर उपरोक्त क्वेरी को संशोधित कर सकते हैं DELETE के साथ :

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;

परिणाम:

PetId  PetName  PetType
-----  -------  -------
1      Wag      Dog    
2      Scratch  Cat    
3      Tweet    Bird   
4      Bark     Dog    

तालिका को अब डी-डुप्लिकेट कर दिया गया है।

जैसा कि अपेक्षित था, हमारे कुत्ते "वाग" के लिए डुप्लिकेट पंक्तियों में से एक को हटा दिया गया है और दूसरा बना हुआ है। "बार्क" के लिए दो डुप्लिकेट पंक्तियों को भी हटा दिया गया है।

SQLite के rowid . के कारण हम ऐसा करने में सक्षम हुए हैं . डिफ़ॉल्ट रूप से, SQLite में प्रत्येक पंक्ति में एक विशेष कॉलम होता है, जिसे आमतौर पर rowid कहा जाता है। , जो विशिष्ट रूप से तालिका के भीतर उस पंक्ति की पहचान करता है। जब तक इसे तालिका से स्पष्ट रूप से हटा नहीं दिया जाता है, आप इसे प्रत्येक पंक्ति के लिए एक विशिष्ट पहचानकर्ता के रूप में उपयोग कर सकते हैं, जो हमें उपरोक्त प्रश्नों को बनाने में सक्षम बनाता है। अगले उदाहरण पर भी यही बात लागू होती है।

विकल्प 2

यह मानते हुए कि तालिका को उसके मूल डेटा (डुप्लिकेट पंक्तियों सहित) के साथ बहाल कर दिया गया है, इसे डी-डुप्लिकेट करने का एक और विकल्प है।

जांचें कि कौन सी पंक्तियां हटा दी जाएंगी:

SELECT * FROM Pets
WHERE rowid > (
  SELECT MIN(rowid) FROM Pets p2  
  WHERE Pets.PetName = p2.PetName
  AND Pets.PetType = p2.PetType
);

परिणाम:

PetId  PetName  PetType
-----  -------  -------
1      Wag      Dog    
4      Bark     Dog    
4      Bark     Dog    

अब उन पंक्तियों को हटा दें:

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. SQLite क्वेरी परिणामों को HTML तालिका के रूप में प्रारूपित करें

  2. SQLite तालिका में CSV फ़ाइल आयात करें

  3. SQLite डेटाबेस में वर्तमान दिनांक और समय सम्मिलित करना

  4. एक webservice से डेटा पढ़ने के लिए अनुशंसित तरीका/आदेश, उस डेटा को पार्स करें और इसे SQLite डीबी में डालें

  5. Android SQLite डेटाबेस और ऐप अपडेट