tipos query example dual checker mysql sql

query - select structure mysql



Mysql Duplicate Rows(Duplicado detectado utilizando 2 columnas) (6)

¿Cómo eliminar duplicados en esta configuración?

id A B ---------------- 1 apple 2 2 orange 1 3 apple 2 4 apple 1

Aquí quiero eliminar (manzana, 2) que ocurre dos veces. Los números de identificación son únicos. Yo usaría la palabra clave DISTINCT si no lo fuera. ¿Puedo hacer una clave de las columnas A y B y luego usar la palabra clave DISTINCT para obtener lo que necesito? Muchas gracias por tus respuestas.


No estoy exactamente seguro de lo que estás preguntando aquí. Si no desea duplicados de las columnas A y B, haga lo que mencionó SELECT DISTINCT A, B FROM XXX . Tal vez podría publicar un ejemplo del tipo de resultado que le gustaría ver.



Podría usar una tabla temporal con los datos que desea:

insert into temp_table select min(id), A, B group by A, B


DELETE FROM mytable USING mytable, mytable AS vtable WHERE vtable.id > mytable.id AND mytable.A = vtable.A AND mytable.A = vtable.A


DELETE FROM fruit_table FT1 WHERE EXISTS ( SELECT * FROM fruit_table FT2 WHERE FT2.fruit_name_column = FT1.fruit_name_column AND FT2.fruit_integer_column = FT1.fruit_integer_column AND FT2.id <> FT1.id )

Esto supone que no le importa cuál de los registros duplicados se elimina.


delete from myTable where id not in (select min(id) from myTable group by A, B)

es decir, la selección entre paréntesis devuelve el primer id para cada agrupación de A y B; la eliminación de todos los identificadores que no están en este conjunto eliminará todas las apariciones de una combinación A-más-B que sean "posteriores" a su primera aparición.

EDITAR : esta sintaxis parece ser problemática: ver informe de errores:

http://bugs.mysql.com/bug.php?id=5037

Una posible solución es hacer esto:

delete from myTable where id not in ( select minid from (select min(id) as minid from myTable group by A, B) as newtable )