update not ejemplo duplicate mysql insert-update

mysql - not - INSERT INTO... SELECT FROM... ON DUPLICATE KEY UPDATE



mysql update (2)

Aunque llego muy tarde a esto, pero después de ver algunas preguntas legítimas para aquellos que querían usar la consulta INSERT-SELECT con la cláusula GROUP BY , se me ocurrió el trabajo para esto.

Tomando más la respuesta de Marcus Adams y la contabilidad de GROUP BY en ella, así es como resolvería el problema usando Subqueries in the FROM Clause

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT sb.id, uid, sb.location, sb.animal, sb.starttime, sb.endtime, sb.entct, sb.inact, sb.inadur, sb.inadist, sb.smlct, sb.smldur, sb.smldist, sb.larct, sb.lardur, sb.lardist, sb.emptyct, sb.emptydur FROM (SELECT id, uid, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur FROM tmp WHERE uid=x GROUP BY location) as sb ON DUPLICATE KEY UPDATE entct=sb.entct, inact=sb.inact, ...

Estoy haciendo una consulta de inserción donde la mayoría de las columnas necesitarían actualizarse a los nuevos valores si ya existía una clave única. Es algo parecido a esto:

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur FROM tmp t WHERE uid=x ON DUPLICATE KEY UPDATE ...; //update all fields to values from SELECT, // except for exp_id, created_by, location, animal, // starttime, endtime

No estoy seguro de cuál debería ser la sintaxis de la cláusula UPDATE . ¿Cómo me refiero a la fila actual de la cláusula SELECT ?


MySQL asumirá que la parte anterior a la igualdad hace referencia a las columnas nombradas en la cláusula INSERT INTO, y la segunda parte hace referencia a las columnas SELECT.

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur FROM tmp t WHERE uid=x ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...