mysql - Convert Duplicate Finder Query to Drop All But the Newest Record -
मेरे पास डुप्लिकेट खोजक क्वेरी है ...
चुनें लेखक, नाम, ट्रैकनम, शीर्षक_आईडी, लेखक, नाम, ट्रैकनम, टाइटल_आईड द्वारा डब्ल्यूटीबल ग्रुप से COUNT (*) होस्टिंग COUNT (*) & gt; 1 यह उन रिकॉर्ड को लौटाता है जो डुप्लिकेट होते हैं, और कितने की गिनती की जाती है।
मैं इसे विस्तारित करना चाहूंगा ताकि वह सभी को छोड़ दें लेकिन नवीनतम प्रत्येक डुप्लिकेट का संस्करण मेरा मानना है कि हम id या datetime फ़ील्ड का उपयोग कर सकते हैं जो कि मेरे पास रिकार्ड रखने की पहचान करने के लिए तालिका में उपलब्ध है या फिर एक और तरीका है? संपादित करें: मैं आधे रास्ते से हूं ... <प्री> SELECT * FROM db.table ग्रुप द्वारा लेखक, नाम, ट्रैकनम, शीर्षक_आइड COUNT (*) & gt; 1 नाम का नाम, ट्रैकनम उपर्युक्त प्रत्येक डुप्लिकेट की एक प्रति दिखाई देता है। जब मैं उन्हें कार्यक्षेत्र में हटा देता हूं, तो मैं शेष शेष नवीनतम अनूठी रिकॉर्डों के साथ ही छोड़ा जाता हूं। मैं सिर्फ एक और कदम को स्वचालित करना चाहता हूं। इसके अलावा यह दो से अधिक समान रिकॉर्ड के लिए खाता नहीं है।
प्रस्तावित समाधान # # चरण 01) अस्थायी कुंजी सारएँ बनाएँ # तालिका कुंजी बनाएं टोपी (आईडी INT नहीं शून्य, प्राथमिक कुंजी (आईडी)); टेबल कुंजी बनाओ टोड की तरह कुंजी बनाओ TOoKeep; # # चरण 02) सभी आईडी मूल्यों को इकट्ठा करें जिन्हें आप रखें # कुंजी में जोड़ें INSERT से चुनें SELECT id FROM (चुनें MAX (आईडी) आईडी, लेखक, नाम, TrackNum, title_id से db.table ग्रुप द्वारा लेखक, नाम, TrackNum, title_id) ए ; # # चरण 03) सभी आईडी मानों को इकट्ठा करें जिन्हें आप छोड़ना चाहते हैं # कुंजी के रूप में जोड़ें दबाएं चयन एआईडी से db.table एक बायां जुड़ने की कुंजी टोकेप USING (id) जहां बीआईडी शून्य है; # # चरण 04) मास हटाएं # हटाएं ए * से डीबीटीबल ए इनर जॉइन कीज टॉइड्रोप बी यूएसिंग (आईडी); # # चरण 05) Temp Key Tables # DROP TABLE KeysToKeep; ड्रॉप तालिका कुंजियाँ; प्रस्तावित समाधान (छोटा संस्करण) # # चरण # 01) टेम्पलेट कुंजी तालिका बनाएं # टेबल बनाने की कुंजी टॉकीप (आईडी INT नहीं है, प्राथमिक कुंजी (id )); # # चरण 02) सभी आईडी मूल्यों को इकट्ठा करें जिन्हें आप रखें # कुंजी में जोड़ें INSERT से चुनें SELECT id FROM (चुनें MAX (आईडी) आईडी, लेखक, नाम, TrackNum, title_id से db.table ग्रुप द्वारा लेखक, नाम, TrackNum, title_id) ए ; # # चरण 03) मास हटाएं # हटाएं ए * से db.table एक बायां जुड़ने वाली कुंजी TOKeep B USING (id) जहां बीआईडी शून्य है; # # चरण 04) अस्थायी कुंजी तालिका # ड्रॉप तालिका कुंजियों टोकिप निकालें; प्रस्तावित समाधान (पैरानोइड वर्जन) # # चरण # 01) टेम्पलेट कुंजी तालिका बनाएं # टेबल बनाने की कुंजी टॉकीप (आईडी INT नहीं है, प्राथमिक कुंजी (आईडी )); # # चरण 02) सभी आईडी मूल्यों को इकट्ठा करें जिन्हें आप रखें # कुंजी में जोड़ें INSERT से चुनें SELECT id FROM (चुनें MAX (आईडी) आईडी, लेखक, नाम, TrackNum, title_id से db.table ग्रुप द्वारा लेखक, नाम, TrackNum, title_id) ए ; # # चरण 03) टेप को एक और अस्थायी तालिका में रखें # तालिका बनाएं db.table_new की तरह db.table; Db.table_new SELECT A. * से सम्मिलित करें db.table से एक INNER JOIN कुंजी TOKeep B USING (id); # # चरण 04) नई और पुरानी टेबल्स स्वैप करें # वैकल्पिक तालिका db.table RENAME db.table_old; वैकल्पिक तालिका db.table_new RENAME db.table; # # चरण 05) अस्थायी कुंजी तालिका # ड्रॉप टेबल कुंजी को हटा दें; # # चरण 06) ओल्ड टेबल ड्रॉप करें यदि db.table की सामग्री सही है # DROP TABLE db.table_old; एपिलॉजी
पहले दो मामलों में, यह सुनिश्चित करने के लिए कि KeysToKeep और / या KeysToDrop जांचें रखने या ड्रॉप करने के लिए कुंजी पिछले मामले में, तालिका db.table_old ड्रॉप करें अगर आप निश्चित हैं यदि आप निश्चित नहीं हैं, तो आप इसे वापस इस तरह से रोल कर सकते हैं: ALTER TABLE db.table RENAME db.table_new; वैकल्पिक तालिका db.table_old RENAME db.table; इसे एक प्रयास करें!
Comments
Post a Comment