我正在做一个insert查询,如果已经存在唯一键,那么许多列中的大多数都需要更新为新值.事情是这样的:

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条款中的当前行?

推荐答案

MySQL将假定equals前面的部分引用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, ...

Mysql相关问答推荐

MYSQL子查询

了解查询中ORDER BY的行为

SQL - Select 复合主键,条件为其中一个主键

对具有依赖子查询结果的2列使用等式比较来优化连接

将上传文件的存储路径放在一张表中的缺点是什么?

从 MySQL WordPress Select 最后一行

如何让连续 3 周或以上的用户有订单?

提取 MySQL 5.7 连续值的差异

JOOQ:如何将 POJO 列序列化为 JSON

INNER JOIN 问题(MySQL 错误代码:1054)

在 MySQL 中使用三个表进行计算

如何在 MySQL 中删除具有 2 列作为复合主键的多行?

MySQL行格式:固定和动态之间的区别?

在 MySQL 中找不到 outfile 创建的文件

使用 Docker 我收到错误:SQLSTATE[HY000] [2002] 没有这样的文件或目录

使用 mysqldriver 连接数据库时出错

MySQL:切换 int 字段值的简单方法

Python 是否支持 MySQL 准备好的语句?

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

cron 启动的 mysqldump 和密码安全