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.
Otra más (de http://labs.creativecommons.org/2010/01/12/removing-duplicate-rows-in-mysql/ ). Agregue un índice único y luego elimínelo:
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX tmpindex (A,B);
ALTER TABLE mytable DROP INDEX tmpindex;
La IGNORE
clave IGNORE
es una extensión de mysql que hace que elimine filas que violan la palabra clave UNIQUE
lugar de solo fallar.
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
)