Actualización de SQL en actualización de key duplicada

He hecho esta pregunta Agrupando y actualizando la gran tabla de la database , pero no obtuve la respuesta para esto.

Tengo una tabla: name, date, detail, no , y name, date, detail están juntos como PK.

De alguna manera tengo que actualizar los detail , y es posible que haya una key duplicada. Por lo tanto, necesito sumr el no para las filas duplicadas. ON DUPLICATE KEY UPDATE solo se usa para INSERT . Entonces, ¿cómo abordar este problema?

Lo primero es lo primero, esa key primaria de múltiples columnas probablemente sea una mala idea; como descubriste, dificulta la manipulación de los campos individuales. Lo que debe hacer es agregar una columna de autoincrement bigint a esa tabla, que se convertirá en su nueva key principal, y su restricción de exclusividad de tres columnas puede ser un índice único en su lugar. Debería funcionar mejor … pero también le permitirá hacer el tipo de manipulación que necesita. Le permitirá realizar modificaciones pero aún así le permitirá identificar las filas originales por su índice integer.

Si lo hace, su "actualización por única vez" ahora puede hacerse de manera segura, siempre y cuando no le importe crear algunas tablas temporales para trabajar. Algo como esto:

Cree un par de tablas temporales con el mismo esquema, pero sin el índice único de tres columnas: puede tener un índice no exclusivo, ya que ayudará con las consultas que está a punto de realizar;

Copie los loggings que necesita procesar en la primera tabla (incluida la key primaria entera única);

Actualice todas las columnas de detail que necesita actualizar en la tabla temporal;

Use INSERT ... SELECT con SUM y GROUP BY para fusionar esos loggings en la segunda tabla;

 INSERT INTO temp2 (...whatever...) SELECT ...whatever..., SUM(no) FROM temp1 GROUP BY ...whatever... 

Finalmente, elimine todos los loggings en la tabla temp1 de la tabla original (usando la key primaria entera), e inserte los loggings en la tabla temp2 en la tabla original.

Mal layout. debe usar la key primaria id sustituta y hacer de estos campos un índice único compuesto. Si quiere hacer reference a esto una tabla más tarde, ¿qué tendrá? 3 campos adicionales como una key externa en otra tabla y un índice extra grande. ¿Cómo actualizará el campo de detalles? Si lo dijiste antes de que sea una gran table, significa que el índice PK se rebuildá. Desactive la restricción si es posible y si no se hace reference a ella ya. Seleccione seleccionar o agrupar de su tabla de origen y realice su actualización con esta opción.


REEMPLAZAR EDITAR

  REPLACE INTO table(name,date,detail) select distinct name,date,(select distinict detail from table) from table