Amigos,
El borrado de data de tablas MySQL es un poco particular ya esta BD no permite el uso de subconsultas para Update o Delete, con lo cual nuestra query de costumbre para Sql Server devuelve un error
-------------------------------------------------------------------------
-- Detalle: Este script permite borrar registros duplicados Sql Server --
-- Autor: Gustavo Herrera --
-------------------------------------------------------------------------
-- 1) Agrego un campo "id" identity (si no lo tiene)
Alter Table TablaX
add id integer identity
-- 2) Borro registros duplicados
Delete from TablaX
where Id > (Select min(Id) From TablaX as b Where TablaX.Idmsg = b.Idmsg)
-- 3) Dropeo el campo creado para correr el paso 2
Alter Table TablaX
Drop Column id
Con el problema “encima”, me dediqué a buscar algo que me permitiese borrar los registros (no a mano claro).
Luego de muuuucho buscar encontré algo que el MySql tiene bien escondido o al menos no lo suficientemente documentado.
Se trata de una cláusula que, al ser agregada a la creación de un índice unique en el MySql, deja soló uno de los registros duplicados borrando al resto.
La clásula oculta se llama IGNORE y esta es la sentencia:
ALTER IGNORE TABLE `Nombre Tabla`
ADD UNIQUE INDEX IxUnique_Globalid_Direction (campo1,campo2);
Grandes problemas, pequeñas pero efectivas soluciones amigos...,de lo contrario no les quedará otra más que crear una tabla temporal y copiar hacia allí los registros "buenos" para luego borrar la tabla anterior (algo sumamente engorroso y que requiere de un downtime considerable)
Espero que les sirva, saludos.
Mi nombre es Gustavo Herrera. Me desempeño profesionalmente como DBA especializado en Microsoft Sql Server, formo parte activamente de la Comunidad Sql Server de Argentina (comunidad oficial de Microsoft). La idea de este blog es generar un vínculo más de intercambio con uds., mis queridos colegas. Espero que se sientan a gusto, pasen, vean, opinen, comenten, critiquen, aporten.. este blog lo hacemos entre todos.