INSERT INTO … ВЫБИРАЕТ ИЗ … НА ДУБЛИРУЮЩЕМСЯ КЛЮЧЕВОМ ОБНОВЛЕНИИ

Я делаю запрос на вставку, где большинство многих столбцов должно было бы быть обновлено к новым значениям, если бы уникальный ключ уже существовал. Это проходит примерно так:

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

Я не уверен что синтаксис для UPDATE пункт должен быть. Как я обращаюсь к текущей строке от SELECT пункт?

112
задан lexu 18 March 2010 в 18:19
поделиться

1 ответ

MySQL примет часть перед равенством ссылается на столбцы, указанные в предложении INSERT INTO. , а вторая часть ссылается на столбцы SELECT.

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, ...
158
ответ дан 24 November 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: