2011-06-23 12 views
25

मैं बेसबॉल खिलाड़ियों (सभी 1000 या तो) की एक तालिका है से अधिक mysql तालिका में जांच करने के लिए:कैसे डुप्लिकेट के लिए क्षेत्रों के साथ, एकाधिक स्तंभों

mysql> describe person; 
+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| firstname | varchar(30) | NO |  | NULL |    | 
| lastname | varchar(30) | NO |  | NULL |    | 
+-----------+-------------+------+-----+---------+----------------+ 

लेकिन मुझे लगता है कि में जोड़ा मिल गया है कुछ खिलाड़ी हैं दो बार। मैं कैसे जा सकता हूं और किसी विशेष प्रथम नाम, आखिरी नाम कॉम्बो की कितनी घटनाओं की जांच कर सकता हूं?

+2

क्या करें @ आरसी ने कहा, फिर एक '(पहला नाम, अंतिम नाम) 'अद्वितीय कुंजी – Mikhail

उत्तर

60

यह डुप्लिकेट की सूची प्रदान करता है:

SELECT firstname, lastname, COUNT(*) 
FROM person 
GROUP BY firstname, lastname 
HAVING COUNT(*) > 1; 

आप में गिना जाता है को देखने के लिए हर पंक्ति के लिए होने खंड को दूर करना चाहते हैं:

SELECT firstname, lastname, COUNT(*) 
FROM person 
GROUP BY firstname, lastname; 
+3

स्पष्ट रूप से सबसे अच्छा उत्तर संभव जोड़ें। –

+0

बिल्कुल सही !!! धन्यवाद – Mohanraj

4
SELECT firstname, lastname, count(id) count 
    FROM person 
WHERE firstname = ? 
    AND lasttname = ? 
GROUP BY firstname, lastname 
+0

जो केवल आपको बताता है _if_ एक विशेष व्यक्ति एक डुप्लिकेट है, नहीं _which_ व्यक्तियों को डुप्लिकेट किया गया है। – Alnitak

+0

हां, यही पूछा गया था। – manji

+0

आह, हाँ, मैं देखता हूं कि आपका क्या मतलब है। मेरा मानना ​​है कि उसका मतलब _particular_ _ "विशिष्ट" _ के बजाय _ "विशिष्ट" _ में है। मैं अपनी टिप्पणी में भी अस्पष्ट था, जहां मेरा मतलब वास्तव में _ "विशिष्ट" _ था! :) – Alnitak

2

मूल्य घटते के अनुसार क्रमबद्ध सूची के लिए प्रतियों की संख्या:

SELECT firstname, lastname, COUNT(*) AS n 
    FROM person 
GROUP BY firstname, lastname 
ORDER BY n DESC 
HAVING n > 1 

HAVING खंड महत्वपूर्ण हिस्सा है - यहGROUP BY खंड के बाद फिल्टर करने के लिए परिणाम आवश्यक है, के बाद से एक WHERE खंड पंक्तियों इससे पहले कि वे वर्गीकृत किया कर रहे हैं बाहर फिल्टर।

1

नकली नाम का पहचान-पत्र प्राप्त करने के लिए और साथ ही नाम है:

SELECT p1.id, p1.firstname, p1,lastname FROM person p1 
INNER JOIN person p2 ON (p1.firstname = p2.firstname 
         AND p1.lastname = p1.lastname 
         AND p1.id <> p2.id); 
+0

@Annitak, मैं जो कहता हूं उसे सुनें, मेरा मतलब क्या है :-)। – Johan

1

आप बस सभी डुप्लिकेट को मिटाना चाहते हैं, तो आप एक अस्थायी तालिका करते हैं और इसे भरने के सभी आप के साथ हो सकता है re data except the duplicate and them re-update you प्राथमिक तालिका फिर से ।

डुप्लिकेट के साथ डेटा का चयन करने के लिए इस

SELECT DISTINCT firstname, lastname FROM table 
आप कर रहे हैं तालिका

SELECT firstname, lastname, COUNT(*) AS n 
    FROM person 
GROUP BY firstname, lastname 
ORDER BY lastname DESC 
HAVING n > 1 

में डेटा की पूरी सूची प्राप्त करने के लिए यह पिछले क्वेरी के साथ आप एक मिल जाएगा

होगा क्वेरी वर्णमाला के अंतिम नाम द्वारा क्रमबद्ध डेटा की सूची।

1

तालिका में डुप्लिकेट रिकॉर्ड्स खोजने के लिए (उदा: डुप्लिकेट रिकॉर्ड के लॉगिन नाम और पासवर्ड संयोजन को ढूंढने के लिए) नीचे दी गई क्वेरी का उपयोग करें;

SELECT em.* FROM employee_master AS em JOIN 
(SELECT emp.login, emp.password, COUNT(*) 
    FROM employee_master emp 
    WHERE emp.login != '' AND emp.password != '' 
    GROUP BY emp.login, emp.PASSWORD 
    HAVING COUNT(*) > 1 
) AS dl 
WHERE em.login = dl.login AND em.password = dl.password; 
संबंधित मुद्दे