valores - seleccionar datos duplicados mysql
Encuentra registros duplicados en MySQL (15)
Quiero sacar registros duplicados en una base de datos MySQL. Esto se puede hacer con:
SELECT address, count(id) as cnt FROM list
GROUP BY address HAVING cnt > 1
Lo que resulta en:
100 MAIN ST 2
Me gustaría tirarlo para que muestre cada fila que es un duplicado. Algo como:
JIM JONES 100 MAIN ST
JOHN SMITH 100 MAIN ST
¿Alguna idea sobre cómo se puede hacer esto? Estoy tratando de evitar hacer la primera y luego buscar los duplicados con una segunda consulta en el código.
¿No es esto más fácil?
SELECT *
FROM (
SELECT ao.*, (@r := @r + 1) AS rn
FROM (
SELECT @_address := 'N'
) vars,
(
SELECT *
FROM
list a
ORDER BY
address, id
) ao
WHERE CASE WHEN @_address <> address THEN @r := 0 ELSE 0 END IS NOT NULL
AND (@_address := address ) IS NOT NULL
) aoo
WHERE rn > 1
?
¿Por qué no solo UNIRSE ÚNICAMENTE a la mesa?
SELECT a.firstname, a.lastname, a.address
FROM list a
INNER JOIN list b ON a.address = b.address
WHERE a.id <> b.id
Se necesita un DISTINTO si la dirección puede existir más de dos veces.
Encuentra usuarios duplicados por dirección de correo electrónico con esta consulta ...
SELECT users.name, users.uid, users.mail, from_unixtime(created)
FROM users
INNER JOIN (
SELECT mail
FROM users
GROUP BY mail
HAVING count(mail) > 1
) dupes ON users.mail = dupes.mail
ORDER BY users.mail;
Esto seleccionará duplicados en una tabla, no subconsultas.
SELECT *
FROM tc_tariff_groups
GROUP BY group_id
HAVING COUNT(group_id) >1
Esta consulta emula de forma ROW_NUMBER()
presente en Oracle
y SQL Server
Ver el artículo en mi blog para más detalles:
- Funciones analíticas: SUM, AVG, ROW_NUMBER - emulando en
MySQL
.
Intenté la mejor respuesta elegida para esta pregunta, pero me confundió un poco. De hecho, lo necesitaba en un solo campo de mi mesa. El siguiente ejemplo de este enlace funcionó muy bien para mí:
SELECT COUNT(*) c,title FROM `data` GROUP BY title HAVING c > 1;
La clave es volver a escribir esta consulta para que se pueda utilizar como una subconsulta.
SELECT firstname,
lastname,
list.address
FROM list
INNER JOIN (SELECT address
FROM list
GROUP BY address
HAVING COUNT(id) > 1) dup
ON list.address = dup.address;
Otra solución sería usar alias de tablas, de esta manera:
SELECT p1.id, p2.id, p1.address
FROM list AS p1, list AS p2
WHERE p1.address = p2.address
AND p1.id != p2.id
Todo lo que realmente está haciendo en este caso es tomar la tabla de la lista original, crear dos tablas de retenciones p ( p 1 y p 2 ), y luego realizar una unión en la columna de dirección (línea 3). La cuarta línea se asegura de que el mismo registro no aparezca varias veces en su conjunto de resultados ("duplicados duplicados").
Personalmente esta consulta ha resuelto mi problema:
SELECT `SUB_ID`, COUNT(SRV_KW_ID) as subscriptions FROM `SUB_SUBSCR` group by SUB_ID, SRV_KW_ID HAVING subscriptions > 1;
Lo que hace este script es mostrar todos los ID de suscriptor que existen más de una vez en la tabla y el número de duplicados encontrados.
Estas son las columnas de la tabla:
| SUB_SUBSCR_ID | int(11) | NO | PRI | NULL | auto_increment |
| MSI_ALIAS | varchar(64) | YES | UNI | NULL | |
| SUB_ID | int(11) | NO | MUL | NULL | |
| SRV_KW_ID | int(11) | NO | MUL | NULL | |
Espero que te sea de ayuda!
Procedimiento de consultas de eliminación de duplicados más rápido:
/* create temp table with one primary column id */
INSERT INTO temp(id) SELECT MIN(id) FROM list GROUP BY (isbn) HAVING COUNT(*)>1;
DELETE FROM list WHERE id IN (SELECT id FROM temp);
DELETE FROM temp;
select address from list where address = any (select address from (select address, count(id) cnt from list group by address having cnt > 1 ) as t1) order by address
la subconsulta interna devuelve filas con una dirección duplicada, luego la subconsulta externa devuelve la columna de dirección para la dirección con duplicados. la subconsulta externa debe devolver solo una columna porque se usó como operando para el operador '= cualquiera'
Find duplicate Records:
Suppose we have table : Student
student_id int
student_name varchar
Records:
+------------+---------------------+
| student_id | student_name |
+------------+---------------------+
| 101 | usman |
| 101 | usman |
| 101 | usman |
| 102 | usmanyaqoob |
| 103 | muhammadusmanyaqoob |
| 103 | muhammadusmanyaqoob |
+------------+---------------------+
Now we want to see duplicate records
Use this query:
select student_name,student_id ,count(*) c from student group by student_id,student_name having c>1;
+--------------------+------------+---+
| student_name | student_id | c |
+---------------------+------------+---+
| usman | 101 | 3 |
| muhammadusmanyaqoob | 103 | 2 |
+---------------------+------------+---+
SELECT *
FROM (SELECT address, COUNT(id) AS cnt
FROM list
GROUP BY address
HAVING ( COUNT(id) > 1 ))
SELECT date FROM logs group by date having count(*) >= 2
SELECT t.*,(select count(*) from city as tt where tt.name=t.name) as count FROM `city` as t where (select count(*) from city as tt where tt.name=t.name) > 1 order by count desc
Reemplaza la ciudad con tu mesa. Reemplace el nombre con su nombre de campo
select `cityname` from `codcities` group by `cityname` having count(*)>=2
Esta es la consulta similar que ha solicitado y su 200% es fácil de usar. ¡¡¡Disfrutar!!!