Estou fazendo uma consulta de inserção onde a maioria das muitas colunas precisariam ser atualizadas para os novos valores se uma chave exclusiva já existisse. É mais ou menos assim:
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
Não tenho certeza de qual UPDATE
deve ser a sintaxe da cláusula. Como me refiro à linha atual da SELECT
cláusula?
mysql
insert-update
dnagirl
fonte
fonte
t.
é obrigatório. Eu também encontrei um artigo sobre xaprb ( xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql ) que utiliza esta sintaxe:on duplicate key update b = values(b), c = values(c)
. Isso também funciona.Embora eu esteja muito atrasado para isso, mas depois de ver algumas perguntas legítimas para aqueles que queriam usar
INSERT-SELECT
consulta comGROUP BY
cláusula, eu vim com a solução para isso.Aprofundando a resposta de Marcus Adams e contando
GROUP BY
com ela, é assim que eu resolveria o problema usandoSubqueries in the FROM Clause
fonte