mysql - INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE

标签 mysql insert-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 子句引用当前行?

最佳答案

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 - INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2472229/

相关文章:

mysql - Sequel Pro 中通过端口 3306 的标准 mysql 连接是否安全?

MYSQL触发器插入或更新不同的表

mysql - 如何将 Rails 3.0 推送到 Apache/MySQL 生产服务器

php - 通知 :undefined variable

mysql - 在 MySQL 中将多行连接成单行

php - 插入和更新记录

sql - SQL数据库可以支持 "insert only"模式吗?

mysql - 如果已经存在,如何插入记录或更新?

database - PostgreSQL UPDATE "insert"现有数据前面

php - 使用准备好的语句从带有限制标记的数据库中进行选择