Pregunta

Tengo una tabla en mi base de datos que tiene registros duplicados que quiero eliminar. No quiero crear una nueva tabla con entradas distintas para esto. Lo que quiero es eliminar entradas duplicadas de la tabla existente sin la creación de ninguna tabla nueva. ¿Hay alguna forma de hacer esto?

 id           action
 L1_name      L1_data
 L2_name      L2_data
 L3_name      L3_data   
 L4_name      L4_data
 L5_name      L5_data
 L6_name      L6_data
 L7_name      L7_data
 L8_name      L8_data
 L9_name      L9_data
 L10_name     L10_data
 L11_name     L11_data
 L12_name     L12_data
 L13_name     L13_data 
 L14_name     L14_data
 L15_name     L15_data

mira estos todos son mis campos:
id es único para cada fila.
L11_data es único para el campo de acción respectivo.
L11_data tiene nombres de compañías mientras que action tiene nombres de industrias.

Entonces, en mis datos, tengo un nombre duplicado de las empresas en L11_data para sus respectivas industrias.

Lo que quiero es tener un nombre único y otros datos de las compañías en la industria particular almacenados en acción. Espero haber expresado mi problema de manera que ustedes puedan entenderlo.

¿Fue útil?

Solución

Sí, suponiendo que tenga un campo de ID único, puede eliminar todos los registros que sean iguales, excepto la ID, pero que no tienen " la ID mínima " por su grupo de valores.

Consulta de ejemplo:

DELETE FROM Table
WHERE ID NOT IN
(
SELECT MIN(ID)
FROM Table
GROUP BY Field1, Field2, Field3, ...
)

Notas:

  • Elegí libremente "Mesa" y '' ID '' como nombres representativos
  • La lista de campos (" Campo1, Campo2, ... ") debe incluir todos los campos excepto el ID
  • Esta puede ser una consulta lenta dependiendo del número de campos y filas, sin embargo, espero que esté bien en comparación con las alternativas

EDITAR: en caso de que no tenga un índice único, mi recomendación es simplemente agregar un índice único auto-incremental. Principalmente porque es un buen diseño, pero también porque le permitirá ejecutar la consulta anterior.

Otros consejos

ALTER IGNORE TABLE 'table' ADD UNIQUE INDEX(your cols);

Los duplicados se vuelven NULOS, luego puedes eliminarlos

DELETE
FROM table_x a
WHERE rowid < ANY (
  SELECT rowid
  FROM table_x b
  WHERE a.someField = b.someField
   AND a.someOtherField = b.someOtherField
  )
WHERE (
  a.someField,
  a.someOtherField
  ) IN (
  SELECT c.someField,
   c.someOtherField
  FROM table_x c
  GROUP BY c.someField,
   c.someOtherField
  HAVING count(*) > 1
  )

En la consulta anterior, la combinación de someField y someOtherField debe identificar los duplicados de manera distintiva.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top