Sto facendo una query di inserimento in cui la maggior parte di molte colonne dovrebbe essere aggiornata ai nuovi valori se esiste già una chiave univoca. E 'più o meno così:INSERISCI IN ... SELEZIONA DA ... ON DUPLICATE AGGIORNAMENTO CHIAVE
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
Non sono sicuro di quello che la sintassi per la clausola UPDATE
dovrebbe essere. Come faccio a fare riferimento alla riga corrente dalla clausola SELECT
?
@dnagirl: ** TIP: ** non cercare di aggiorna le colonne PK, solo quelle che necessitano di aggiornamento vanno nella lista – lexu
La tua sintassi suggerita funziona e il 't' è richiesto. Ho anche trovato un articolo su xaprb (http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/) che utilizza questa sintassi: 'su aggiornamento chiave duplicato b = valori (b), c = valori (c) '. Anche questo funziona. – dnagirl
Nota: questo non funzionerà quando l'istruzione SELECT ha una clausola GROUP BY – joHN