2012-12-10 15 views
5

के बिना MySQL डेटाबेस में डुप्लिकेट प्रविष्टियों को हटा रहा है मुझे बहुत सारे डुप्लीकेट वाले एक बड़े बड़े MySQL डेटाबेस प्राप्त हुए हैं। डेटाबेस के लगभग एक तिहाई डुप्लिकेट हैं। यह भी प्राथमिक कुंजी है।प्राथमिक कुंजी

डेटाबेस की संरचना तो है:

unique_id | field01 | field02 | field03 | field04 | ...... | field26 | field27 | 

अब unique_id, माना जाता है, जबकि अच्छी तरह से, अद्वितीय, बहुत सारे डुप्लिकेट हैं।

इसके अलावा, किसी विशेष अद्वितीय_आईडी की प्रतियों से संबंधित पंक्तियों के सेट के लिए, शेष कॉलम समान हो सकते हैं या नहीं भी हो सकते हैं। उदाहरण के लिए, नीचे unique_id 'id_1' को देखते हुए, फ़ील्ड 01 दोनों उदाहरणों में समान है, लेकिन field02 & field03 नहीं हैं।

मैं पुनरावृत्ति को हटाना चाहता हूं और प्रत्येक अद्वितीय_आईडी की केवल एक प्रति जीवित रहना चाहता हूं। इससे कोई फर्क नहीं पड़ता कि कौन सा जीवित रहता है।

उदाहरण:

id_1 | abc | dfd | NULL | ... | def | 
id_2 | abc | daf | ghi | ... | 12a | 
id_1 | abc | xyz | jkl | ... | def | 
id_4 | aaa | bbb | NULL | ... | def | 
id_3 | NULL | bbb | NULL | ... | 123 | 
id_5 | 1e3 | NULL | NULL | ... | def | 
id_3 | aaa | bbb | fds | ... | def | 
id_9 | awa | bbb | NULL | ... | 910 | 

बन चाहिए:

id_1 | abc | dfd | NULL | ... | def | 
id_2 | abc | daf | ghi | ... | 12a | 
id_4 | aaa | bbb | NULL | ... | def | 
id_3 | NULL | bbb | NULL | ... | 123 | 
id_5 | 1e3 | NULL | NULL | ... | def | 
id_9 | awa | bbb | NULL | ... | 910 | 

या यह भी ठीक है:

id_2 | abc | daf | ghi | ... | 12a | 
id_1 | abc | xyz | jkl | ... | def | 
id_4 | aaa | bbb | NULL | ... | def | 
id_5 | 1e3 | NULL | NULL | ... | def | 
id_3 | aaa | bbb | fds | ... | def | 
id_9 | awa | bbb | NULL | ... | 910 | 

एक बार ऐसा हो रहा है, मैं unique_is के रूप में स्थापित करने की आवश्यकता होगी प्राथमिक कुंजी।

कृपया इसे करने का सबसे अच्छा और सटीक तरीका सलाह दें। अग्रिम में धन्यवाद।

+0

ऐसा करने के लिए नई तालिका का नाम बदलने आप केवल अद्वितीय_आईडी कॉलम पर डुप्लिकेशन जांच चाहते हैं? –

+0

कृपया इस धागे को देखें, आपको डुप्लिकेट मानों को हटाने के बारे में कुछ अंतर्दृष्टि मिलेगी :: http://stackoverflow.com/questions/2728413/equivalent-of-oracles-rowid-in-mysql –

उत्तर

2

आप आप के लिए अपनी तालिका में एक अद्वितीय सूचकांक जोड़ सकते हैं, सभी त्रुटियों अनदेखी, एवं माई SQL सब दोहराया गया पंक्तियों (एक को छोड़कर) को हटा दें:

ALTER IGNORE TABLE your_table ADD UNIQUE INDEX dupidx (unique_id) 

लेकिन आप अभी भी कोई त्रुटि मिलती है, भले ही आप ध्यान न दें खंड का उपयोग करें, इस प्रयास करें:

ALTER TABLE your_table ENGINE MyISAM; 
ALTER TABLE IGNORE your_table ADD UNIQUE INDEX dupidx (unique_id); 
ALTER TABLE your_table ENGINE InnoDB; 

तुम सिर्फ, अपने डेटा दिखा प्रत्येक डुप्लिकेट किए गए आईडी के लिए सिर्फ एक पंक्ति रखने में रुचि रखते हैं, तो आप इस इस्तेमाल कर सकते हैं:

SELECT * 
FROM your_table 
GROUP BY unique_id 
0

इस प्रयास करें: select unique_id, field01 , field02 , field03 from (table_name) group by unique_id having sum(unique_id)<1

1

मुझे लगता है कि समस्या थी, और यह मेरे लिए महान काम किया:

CREATE TABLE newtable SELECT * FROM oldtable GROUP BY unique_id; 

फिर oldtable ड्रॉप, और पुराने तालिका नाम

संबंधित मुद्दे