दिलचस्प पोस्ट
अपलोड करने के लिए फ़ाइल में HTML5 कैनवास कन्वर्ट? जावा, मैं "प्रत्येक" लूप में वर्तमान सूचकांक / कुंजी कैसे प्राप्त करूं WPF blurry फोंट मुद्दा- समाधान अजीब प्रतिध्वनि, PHP में प्रिंट व्यवहार? कैसे पता लगाया जा सकता है कि जब उपयोगकर्ता ने एक फ़ाइल को PHP में डाउनलोड करना सफलतापूर्वक पूरा कर लिया है रेल और रीढ़ की हड्डी एक साथ काम कर रहे हैं स्प्रिंग रेस्टटेमप्लेट – अनुरोधों / प्रतिक्रियाओं के पूर्ण डिबगिंग / लॉगिंग को सक्षम कैसे करें? बहुत सारे पाठ के साथ एक div के नीचे स्क्रॉल करने के लिए jQuery का उपयोग करें आईफोन एसडीके में नए फोंट को कैसे शामिल और इस्तेमाल किया जाए? एंड्रॉइड में एडिट टेस्ट दृश्य में बहु-लाइन की अनुमति दें? एक आईडी को छुपाना मैं लिनक्स सिस्टम कॉल कैसे रोक सकता हूं? फ़ोल्डर्स की तारीख- उसके बाद- (सीएमडी फाइल में डेट कैल्श) सफ़ल पाठ के तहत पूर्ण जेएस स्वत: पूर्णता प्राप्त करना चलने योग्य / ड्रैग करने योग्य <div>

डुप्लिकेट पंक्तियों को केवल सबसे पुरानी पंक्ति छोड़कर निकालें?

मेरे पास डेटा की एक तालिका है और उपयोगकर्ता सबमिशन से कई डुप्लिकेट प्रविष्टियां हैं।

मैं फ़ील्ड subscriberEmail एमेल के आधार पर सभी डुप्लिकेट पंक्तियों को हटाना चाहता हूं, केवल मूल सबमिशन छोड़कर।

दूसरे शब्दों में, मैं सभी डुप्लिकेट ईमेल खोजना चाहता हूं, और उन पंक्तियों को हटाना चाहता हूं, केवल मूल छोड़कर।

मैं मेज गमागमन बिना यह कैसे कर सकता हूँ?
मेरी तालिका में प्रत्येक पंक्ति के लिए अद्वितीय ID हैं

Solutions Collecting From Web of "डुप्लिकेट पंक्तियों को केवल सबसे पुरानी पंक्ति छोड़कर निकालें?"

चूंकि आप id कॉलम का एक सूचक के रूप में उपयोग कर रहे हैं, जिसका रिकॉर्ड 'मूल' है:

 delete x from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail where x.id > z.id 

यह प्रति ईमेल पते पर एक रिकॉर्ड छोड़ देगा।

जोड़ने के लिए संपादित करें:

उपरोक्त क्वेरी की व्याख्या करने के लिए …

यह विचार यहां स्वयं के विरुद्ध तालिका में शामिल होना है बहाना है कि आपके पास टेबल की दो प्रतियां हैं, प्रत्येक नाम कुछ अलग है। तब आप उनसे एक दूसरे से तुलना कर सकते हैं, और सबसे कम आईडी या प्रत्येक ईमेल पते के लिए खोजें। फिर आप उस डुप्लिकेट रिकॉर्ड को बाद में बनाए गए थे और उन्हें हटा सकते थे। (मैं इस बारे में सोचते हुए एक्सेल को देख रहा था।)

किसी तालिका में उस ऑपरेशन को करने के लिए, इसकी तुलना इसकी तुलना करें और प्रत्येक पक्ष की पहचान करने में सक्षम हो, आप तालिका अलियियों का उपयोग करते हैं x एक तालिका उपनाम है इसे इस तरह from खंड from असाइन किया गया from : from <table> <alias> : x अब एक ही क्वेरी में कहीं और इस्तेमाल किया जा सकता है जो उस तालिका को शॉर्टकट के रूप में संदर्भित करता है।

delete x क्वेरी को हमारी कार्रवाई और लक्ष्य के साथ शुरू करता है हम कई तालिकाओं से रिकॉर्ड का चयन करने के लिए एक क्वेरी करने जा रहे हैं, और हम x में दिखाई देने वाले रिकॉर्ड को हटाना चाहते हैं।

उपनामों को तालिका के दोनों 'उदाहरण' के संदर्भ में उपयोग किया जाता है from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail अपने आप के सामने टेबल बना देता है जहां ईमेल from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail । इसके बाद के खंड के बिना, हर रिकॉर्ड का चयन किया जाएगा क्योंकि यह स्वयं के विरुद्ध जुड़ा हो सकता है।

where खंड चयनित अभिलेखों को सीमित करता है where x.id > z.id 'उदाहरण' के लिए अनुमति देता है, केवल ईमेल के मेल खाने वाले अभिलेखों को रखने के लिए, लेकिन एक उच्च id मान है। जो डेटा आप वास्तव में तालिका में चाहते हैं, अद्वितीय ईमेल पते (निम्न आईडी के साथ) x हिस्सा नहीं होगा और हटाया नहीं जाएगा। x में एकमात्र रिकॉर्ड डुप्लिकेट रिकॉर्ड (ईमेल पते) होगा जो कि उस ईमेल पते के लिए मूल रिकॉर्ड की तुलना में अधिक है।

इस मामले में शामिल होने और जहां खंड जोड़ सकते हैं:

 delete x from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail and x.id > z.id 

डुप्लिकेट को रोकने के लिए, उपभोक्ता ईमेल कॉलम को एक अद्वितीय अनुक्रमित कॉलम बनाने पर विचार करें।

इसके बारे में कैसे, अब आपको स्व जुड़ने का उपयोग करते हुए कोई अस्थायी तालिका बनाने की ज़रूरत नहीं है

 DELETE u1 FROM users u1, users u2 WHERE u1.id < u2.id AND u1.email = u2.email 

यह जांचने के लिए कि तालिका में कोई डुप्लिकेट रिकॉर्ड है या नहीं

 SELECT count(*) as Count, email FROM users u group by email having Count > 1 

यदि आपके पास प्रत्येक पंक्ति के लिए एक अद्वितीय आईडी है, तो आप इस तरह से कुछ कोशिश कर सकते हैं। मुझसे मत पूछो कि आपको दूसरे चयन बयान की आवश्यकता क्यों है, mysql मुझे अन्यथा निष्पादित करने नहीं देगा। इसके अलावा, जो भी कॉलम के समूह आपके परिणाम अद्वितीय बनाता है

 delete from my_table where id in ( select id from ( select id from my_table a group by subscriberEmail having count(*) > 1 ) b );