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 ...` ?

Comment spécifier correctement les colonnes dans la clause `ON DUPLICATE KEY UPDATE` de MySQL avec `INSERT INTO ... SELECT ...` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-03 11:26:16488parcourir

How to Correctly Specify Columns in MySQL's `ON DUPLICATE KEY UPDATE` Clause with `INSERT INTO ... SELECT ...`?

Résolution de la syntaxe de mise à jour des colonnes dans "INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE"

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.

Solution

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn