2011-06-09 24 views
14

Me postulo una consulta utilizando con éxito en MySQL 5,5MySQL Eliminar con Agrupar por

SELECT columnA 
FROM 
    table 
GROUP BY 
    columnA 
HAVING 
    count(*) > 1 

Sin embargo, se necesita para ejecutar esta misma consulta usando BORRAR y estoy un poco inseguro cómo eliminar? es decir, ¿los resultados devueltos deberían eliminarse?

¿Alguna idea?

Respuesta

18

colocarlo en una subconsulta:

delete from table 
where columnA in (
    select columnA 
    from (
     select columnA 
     from YourTable 
     group by columnA 
     having count(*) > 1 
    ) t 
) 
+2

@Dennis - gracias por la ayuda :) Me estoy poniendo "No se puede especificar la tabla de destino 'mesa' para la actualización de cláusula"? ¿Usando MySQL 5.5? – Tom

+7

Oh, correcto. Siempre me olvido de los errores de MySQL. :-) Subgrupo por segunda vez para obligarlo a usar una tabla temporal: 'eliminar de la tabla donde colA in (seleccionar colA de ([lo que sea]) t)' –

+0

@Dennis - ah :) ¡eso es lo que me estaba atrapando! Muchas gracias. Quizás quieras actualizar tu respuesta :) – Tom

1
delete from YourTable 
where 
    YourTable.columnA 
    in 
    (select columnA 
    from 
    YourTable 
    group by 
    column A 
    having 
    count(*) > 1)