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 ... SELECT FROM ... ON DUPLICATE KEY UPDATE
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 lo que debería ser la sintaxis de la cláusula UPDATE
. ¿Cómo me refiero a la fila actual de la cláusula SELECT
?
@dnagirl: ** TIP: ** no trate de actualice cualquiera de las columnas PK, solo aquellas que necesitan actualización van a la lista – lexu
Su sintaxis sugerida funciona y se requiere 't'. También encontré un artículo sobre xaprb (http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/) que usa esta sintaxis: 'en la actualización de clave duplicada b = valores (b), c = valores (c) '. Esto también funciona – dnagirl
Nota: Esto no funcionará cuando la instrucción SELECT tenga una cláusula GROUP BY – joHN