J'ai une table de joueurs de baseball (environ 1000), avec des champs:
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 | |
+-----------+-------------+------+-----+---------+----------------+
Mais je pense que certains joueurs ont été ajoutés deux fois. Comment puis-je vérifier et vérifier combien d'occurrences d'un combo prénom, nom de famille particulier?
Ceci fournit la liste des doublons:
SELECT firstname, lastname, COUNT(*)
FROM person
GROUP BY firstname, lastname
HAVING COUNT(*) > 1;
Si vous voulez voir les comptes pour chaque ligne, supprimez la clause having:
SELECT firstname, lastname, COUNT(*)
FROM person
GROUP BY firstname, lastname;
SELECT firstname, lastname, count(id) count
FROM person
WHERE firstname = ?
AND lasttname = ?
GROUP BY firstname, lastname
Pour une liste triée par valeur décroissante du nombre de copies:
SELECT firstname, lastname, COUNT(*) AS n
FROM person
GROUP BY firstname, lastname
ORDER BY n DESC
HAVING n > 1
La clause HAVING
est l'élément clé - il est nécessaire de filtrer les résultats après la clause GROUP BY
, car une clause WHERE
filtre les lignes avant elles sont groupées.
Pour obtenir les identifiants des noms en double ainsi que des noms, procédez comme suit:
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);
Si vous voulez simplement effacer tous les doublons, vous pouvez créer une table temporaire et la remplir avec toute votre table primaire ___re data except the duplicate and them re-update you
re.
La requête pour sélectionner les données avec dupliquer serait la suivante:
SELECT DISTINCT firstname, lastname FROM table
Pour obtenir la liste complète des données dans votre table
SELECT firstname, lastname, COUNT(*) AS n
FROM person
GROUP BY firstname, lastname
ORDER BY lastname DESC
HAVING n > 1
Avec cette dernière requête, vous obtenez la liste des données triées par nom alphabétique.
Pour rechercher des enregistrements en double (par exemple, pour trouver le nom de connexion et le mot de passe des enregistrements en double) dans une table, utilisez la requête ci-dessous;
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;