2013-01-21 52 views
12

संभव डुप्लिकेट:
Find duplicate records in MySQLMySQL सूची सभी डुप्लिकेट

मैं इस तरह MySQL में एक मेज है:

ID name email 
1 john  [email protected] 
2 johnny [email protected] 
3 jim  [email protected] 
4 Michael [email protected] 

मैं MySQL क्वेरी जो होगा कैसे हो सकता है इस तरह डुप्लिकेट को सूचीबद्ध करें?

डुप्लिकेट खोज के परिणाम:

ID name email   Duplicate 
1 john  [email protected]  2 
2 johnny [email protected]  2 
+3

यह सटीक प्रश्न पहले से ही उत्तर दिया गया है: http://stackoverflow.com/questions/854128/find-duplicate-records-in-mysql –

उत्तर

25
SELECT a.*, b.totalCount AS Duplicate 
FROM tablename a 
     INNER JOIN 
     (
      SELECT email, COUNT(*) totalCount 
      FROM tableName 
      GROUP BY email 
     ) b ON a.email = b.email 
WHERE b.totalCount >= 2 

बेहतर प्रदर्शन के लिए, स्तंभ EMail पर एक INDEX जोड़ें।

या

SELECT a.*, b.totalCount AS Duplicate 
FROM tablename a 
     INNER JOIN 
     (
      SELECT email, COUNT(*) totalCount 
      FROM tableName 
      GROUP BY email 
      HAVING COUNT(*) >= 2 
     ) b ON a.email = b.email 
+0

@JW मैं कुछ गलत कर रहा हूं, या आपने बहुत जटिल क्वेरी लिखी है? मेरा जवाब देखें – Kamil

+0

@Kamil आपकी क्वेरी के परिणाम में दो रिकॉर्ड होना चाहिए: 'आईडी 1 और 2'। –

+0

मुझे लगता है कि आप जो कुछ भी पूछ रहे हैं उसे समझने में आपको याद आती है। केवल एक टेबल है और नीचे दी गई तालिका mySQL क्वेरी से परिणाम है, डेटाबेस में कोई अन्य तालिका नहीं है। – user1995781

0

MySQL forums, जिस पर चेक this post निम्नलिखित देता है:

SELECT t1.id, t1.name, t1.email FROM t1 INNER JOIN ( 
SELECT colA,colB,COUNT(*) FROM t1 GROUP BY colA,colB HAVING COUNT(*)>1) as t2 
ON t1.email = t2.email; 
1

आप आईडी और में नाम होने के साथ रह सकते हैं अल्पविराम अलग सूची, फिर आप कोशिश कर सकते हैं:

select email, count(*) as numdups, 
     group_concat(id order by id), group_concat(name order by id) 
from t 
group by email 
having count(*) > 1 

यह एक जुड़ाव बचाता है, हालांकि परिणाम एक संबंधपरक प्रारूप में नहीं है।