Je fais une requête d'insertion où la plupart des nombreuses colonnes devraient être mises à jour avec les nouvelles valeurs si une clé unique existait déjà. Ca fait plutot comme ca:
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
Je ne sais pas quelle UPDATE
devrait être la syntaxe de la clause. Comment faire référence à la ligne actuelle de la SELECT
clause?
mysql
insert-update
dnagirl
la source
la source
t.
est obligatoire. J'ai aussi trouvé un article sur xaprb ( xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql ) qui utilise cette syntaxe:on duplicate key update b = values(b), c = values(c)
. Cela fonctionne également.Bien que je sois très en retard, mais après avoir vu des questions légitimes pour ceux qui voulaient utiliser une
INSERT-SELECT
requête avecGROUP BY
clause, j'ai trouvé le travail autour de cela.En poussant plus loin la réponse de Marcus Adams et en y rendant
GROUP BY
compte, voici comment je résoudrais le problème en utilisantSubqueries in the FROM Clause
la source