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

दो कॉलम के आधार पर डुप्लिकेट हटाएं और उस पंक्ति को रखें जिसमें दूसरे कॉलम का न्यूनतम मान हो

आप इस क्वेरी का उपयोग सभी डुप्लिकेट प्रविष्टियों को हटाने के लिए कर सकते हैं, जल्द से जल्द एक को छोड़कर:

DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;

अपडेट करें

एक वैकल्पिक समाधान जो वास्तव में बड़ी तालिकाओं के लिए अधिक कुशल होना चाहिए, डुप्लिकेट प्रविष्टि को रोकने के लिए पंक्तियों पर UNIQUE अनुक्रमणिका का उपयोग करके एक प्रतिलिपि बनाना है:

CREATE TABLE discog_copy (id INT, artist VARCHAR(50), track VARCHAR(50), year INT);
ALTER TABLE discog_copy ADD UNIQUE KEY (artist, track);
INSERT IGNORE INTO discog_copy SELECT * FROM discog ORDER BY year;

अद्वितीय कुंजी संयोजन . पर है कलाकार का नाम और ट्रैक का नाम और इसलिए यह कलाकारों को अलग-अलग ट्रैक और अलग-अलग कलाकारों को एक ही ट्रैक नाम रखने की अनुमति देगा। क्योंकि SELECT क्वेरी के भाग में ORDER BY है वर्ष, यह पहले सबसे कम वर्ष के साथ (कलाकार, ट्रैक, वर्ष) संयोजन सम्मिलित करेगा और फिर अन्य समान (कलाकार, ट्रैक) रिकॉर्ड डुप्लिकेट कुंजी के कारण सम्मिलित नहीं किए जाएंगे।

rextester पर डेमो




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nodejs MySQL कनेक्शन क्वेरी फ़ंक्शन कॉल के लिए वापसी मान

  2. उपयोगकर्ता 'परीक्षण' @ 'आईपी' के लिए प्रवेश निषेध (पासवर्ड का उपयोग करके:हाँ)

  3. एक सिद्धांत इकाई को दो डेटाबेस तालिकाओं में कैसे सहेजना है (MySQL अनुकूलन के लिए आवश्यक)

  4. mysql तालिका पंक्तियों को कॉलम में कैसे स्थानांतरित करें

  5. Mysql_secure_installation का उपयोग करने का उद्देश्य क्या है?