Я делаю запрос вставки, в котором большинство новых столбцов необходимо обновить до новых значений, если уже существует уникальный ключ. Это идет что-то вроде этого:INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE
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
?
@dnagirl: ** TIP **: не пытайтесь обновите любой из столбцов PK, только те, которые нуждаются в обновлении, перейдите в список – lexu
. Предлагаемые синтаксисы и 't.' необходимы. Я также нашел статью о xaprb (http://www.xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql/), которая использует этот синтаксис: 'on duplicate key update b = значения (b), c = значения (c) '. Это также работает. – dnagirl
Примечание: Это не будет работать, если инструкция SELECT имеет предложение GROUP BY – joHN