为了账号安全,请及时绑定邮箱和手机立即绑定

插入……选择……重复键更新

插入……选择……重复键更新

翻翻过去那场雪 2019-11-11 13:03:20
我正在执行插入查询,其中如果已经存在唯一键,则许多列中的大多数都需要更新为新值。它是这样的: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=xON DUPLICATE KEY UPDATE ...; //update all fields to values from SELECT, //       except for exp_id, created_by, location, animal, //       starttime, endtime我不确定该UPDATE子句的语法应该是什么。如何从SELECT子句引用当前行?
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

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, ...


查看完整回答
反对 回复 2019-11-11
  • 2 回答
  • 0 关注
  • 495 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信