saber - Cómo verificar si hay duplicados en la tabla mysql en varias columnas
mostrar un solo registro repetido sql (6)
Tengo una mesa de jugadores de béisbol (todos los 1000), con campos:
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 | |
+-----------+-------------+------+-----+---------+----------------+
Pero creo que hay algunos jugadores que se han agregado dos veces. ¿Cómo puedo revisar y verificar cuántas apariciones de un nombre de pila particular, apellido combo?
Esto proporciona la lista de duplicados:
SELECT firstname, lastname, COUNT(*)
FROM person
GROUP BY firstname, lastname
HAVING COUNT(*) > 1;
Si desea ver los recuentos de cada fila, elimine la cláusula having:
SELECT firstname, lastname, COUNT(*)
FROM person
GROUP BY firstname, lastname;
Para encontrar registros duplicados (por ejemplo, para encontrar la combinación de nombre de usuario y contraseña de registros duplicados) en una tabla, use la consulta siguiente;
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;
Para obtener id''s de nombres duplicados y nombres, haga lo siguiente:
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);
Para una lista ordenada por el valor decreciente de la cantidad de copias:
SELECT firstname, lastname, COUNT(*) AS n
FROM person
GROUP BY firstname, lastname
ORDER BY n DESC
HAVING n > 1
La cláusula HAVING
es la parte clave; es necesario filtrar los resultados después de la cláusula GROUP BY
, ya que una cláusula WHERE
filtra las filas antes de que se agrupen.
Si simplemente quiere borrar todo el duplicado, podría hacer una tabla temporal y llenarla con todos sus re data except the duplicate and them re-update you
tabla principal.
La consulta para seleccionar los datos con duplicados sería este
SELECT DISTINCT firstname, lastname FROM table
Para obtener la lista completa de datos en su tabla
SELECT firstname, lastname, COUNT(*) AS n
FROM person
GROUP BY firstname, lastname
ORDER BY lastname DESC
HAVING n > 1
Con esta última consulta obtendrá una lista de datos ordenados por apellido alfabéticamente.
SELECT firstname, lastname, count(id) count
FROM person
WHERE firstname = ?
AND lasttname = ?
GROUP BY firstname, lastname