Maison >base de données >tutoriel mysql >Comment spécifier correctement les colonnes dans la clause `ON DUPLICATE KEY UPDATE` de MySQL avec `INSERT INTO ... SELECT ...` ?
Cette requête insère des données dans la table lee à partir du tmp table, mettant à jour les lignes existantes si un conflit de clé unique se produit. Cependant, la syntaxe de la clause ON DUPLICATE KEY UPDATE ne semble pas claire.
MySQL suppose que le côté gauche de l'équation après ON DUPLICATE KEY UPDATE fait référence aux colonnes dans la clause INSERT INTO , tandis que le côté droit fait référence aux colonnes de la clause SELECT.
Par exemple, considérez ce qui suit requête :
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, ...
Dans cette requête, le côté gauche de la clause ON DUPLICATE KEY UPDATE correspond aux colonnes nommées dans la clause INSERT INTO. Les colonnes avant le signe égal représentent les colonnes de la table leo, et les colonnes après le signe égal représentent les valeurs à mettre à jour à partir de la clause SELECT.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!