it-swarm.com.de

So überprüfen Sie in der MySQL-Tabelle nach mehreren Spalten auf Duplikate

Ich habe einen Tisch mit Baseballspielern (alle 1000 oder so) mit Feldern:

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    |                |
+-----------+-------------+------+-----+---------+----------------+

Aber ich denke, es gibt einige Spieler, die zweimal hinzugefügt wurden. Wie kann ich durchgehen und prüfen, wie viele Vorkommen eines bestimmten Vornamens (Nachname) vorkommen?

25
cfrederich

Dies stellt die Liste der Duplikate bereit:

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

Wenn Sie die Zählungen für jede Zeile anzeigen möchten, entfernen Sie die Have-Klausel:

SELECT firstname, lastname, COUNT(*) 
FROM person 
GROUP BY firstname, lastname;
60
RC.
SELECT firstname, lastname, count(id) count
  FROM person
 WHERE firstname = ?
   AND lasttname = ?
 GROUP BY firstname, lastname
4
manji

Für eine Liste, die nach abnehmendem Wert der Kopienanzahl sortiert ist:

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

Die HAVING-Klausel ist der Schlüsselteil - es ist notwendig, die Ergebnisse after der GROUP BY-Klausel zu filtern, da eine WHERE-Klausel Zeilen vor filtert, die gruppiert werden.

2
Alnitak

Um IDs von doppelten Namen sowie Namen zu erhalten, gehen Sie folgendermaßen vor:

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); 
1
Johan

Wenn Sie einfach alle Duplikate löschen möchten, können Sie eine temporäre Tabelle erstellen und diese mit Ihrer primären Tabelle (re data except the duplicate and them re-update youre) füllen.

Die Abfrage zur Auswahl der Daten mit Duplikat wäre dies 

 SELECT DISTINCT firstname, lastname FROM table

Um die vollständige Liste der Daten in Ihrer Tabelle zu erhalten 

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

Mit dieser letzten Abfrage erhalten Sie eine Liste der nach Nachnamen alphabetisch sortierten Daten.

1
PRacicot

Verwenden Sie die folgende Abfrage, um doppelte Datensätze in einer Tabelle zu finden (z. B .: um Kombination aus doppelten Datensätzen aus Anmeldename und Kennwort zu suchen).

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;
1
Naresh Chennuri