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:


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





duplicates