MySQL एक बहुत ही अप्रिय प्रतिबंध/एक उप में डाला कि मेज है कि अद्यतन/नष्ट कर दिया जा रहा है उपयोग नहीं कर सकते है आपके php करना -चुनते हैं।
लेकिन आप हटाए जाने के लिए तालिका में शामिल होकर (उप-चयन का उपयोग करने के बजाय) इस पर काम कर सकते हैं।
DELETE d
FROM table_with_duplicates d
JOIN (
SELECT min(id) as min_id, field
FROM table_with_duplicates
GROUP BY field
) keep ON keep.field = d.field
AND keep.min_id <> d.id;
यह डुप्लिकेट में से प्रत्येक के लिए एक पंक्ति रखेंगे (लॉव्ज़ के साथ एक:
मान लिया जाये कि आप अपनी तालिका में अद्वितीय पहचानकर्ता के कुछ प्रकार है (मैं निम्नलिखित बयान में एक स्तंभ id
मान) id
कॉलम में मान)।
यदि आप सभी डुप्लिकेट पंक्तियां (कम से कम एक नहीं रखते) को हटाना चाहते हैं, तो बस AND keep.min_id <> d.id
स्थिति को हटा दें।
संपादित
आप एक अद्वितीय स्तंभ नहीं है, तो है, लेकिन सभी डुप्लिकेट (कम से कम एक पंक्ति में रखते हुए नहीं) को निकालना चाहते हैं, तो आप उपयोग कर सकते हैं:
DELETE d
FROM table_with_duplicates d
JOIN (
SELECT field
FROM table_with_duplicates
GROUP BY field
HAVING count(*) > 1
) del ON del.field = d.field;
स्रोत
2013-01-31 15:10:21
क्या आपको कोई त्रुटि संदेश मिला या क्वेरी सफलतापूर्वक चल रही थी? –
आपकी क्वेरी डुप्लीकेट सहित सभी फ़ील्ड को हटा नहीं देगी? यदि आपके पास उस आईडी के साथ 2 डुप्लीकेट हैं तो आपकी IN() क्वेरी दोनों को हटा देगी। क्या आप कम से कम एक रिकॉर्ड रखना नहीं चाहते हैं? – GGio
mysql आपको उस तालिका पर अपडेट/डिलीट नहीं करने देता है जिससे आप डेटा चुन रहे हैं। –