Table source

    CREATE TABLE `source` (
`key` int(11) NOT NULL AUTO_INCREMENT,
`data` int(11) DEFAULT NULL,
`state` int(11) DEFAULT NULL,
`group` int(11) DEFAULT NULL,
PRIMARY KEY (`key`)
);

Table dest

    CREATE TABLE `dest` (
`dkey` int(11) NOT NULL,
`ddata` int(11) DEFAULT NULL,
`dstate` int(11) NOT NULL,
PRIMARY KEY (`dkey`,`dstate`)
) ;

Source Test Values

INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (1,1,1,1);
INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (2,2,2,1);
INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (8,4,2,1);

Query:

INSERT INTO `test`.`dest` (`dkey`,`ddata`,`dstate`)
SELECT `group`,`data`,`state` FROM `test`.`source`
WHERE `group` = 1
ON DUPLICATE KEY UPDATE
`ddata`= `ddata`+VALUES(`ddata`);

经crazyhacking测试是正确的,结果是:

1 1 1
1 6 2

转载自:http://stackoverflow.com/questions/5728732/mysql-insert-select-on-duplicate-key-update-increment

可能存在的问题:http://hi.baidu.com/ytjwt/item/22869f092b8146d872e6760a

我想把test中的数据导入到test1中,若a存在,则跟新b,c为test表中数据加上test1的数据

开始时候,这样写

insert into test1(a,b,c) select a , b , c from test ON DUPLICATE KEY UPDATE b=b+values(b),c=c+values(c);

就会出现ERROR 1052 (23000): Column 'b' in field list is ambiguous

这是因为在上面的sql中,mysql不知道b到底是数据test 还是test1.所以就会出现上面错误。

后跟改为

insert into test1(a,b,c) select a , b , c from test ON DUPLICATE KEY UPDATE test1.b=test1.b+values(b),test1.c=test1.c+values(c);

就可以运行了

注意:values(b) 与values(c) 其实是代表multiple-row inserts的第二列跟第三列,跟表名没有关系,不能写成values(test.b)

mysql> insert into test1(a,b,c) select a , b , c from test ON DUPLICATE KEY UPDATE test1.b=test1.b+values(test.b),test1.c=test1.c+values(test.c);

ERROR 1054 (42S22): Unknown column 'test.b' in 'field list'

mysql 之SQL语句--NSERT SELECT ON DUPLICATE KEY UPDATE的写法的更多相关文章

  1. 【MySQL插入更新重复值】ON DUPLICATE KEY UPDATE用法

    要插入的数据  与表中记录数据的 惟一索引或主键中产生重复值,那么就会发生旧行的更新 弊端:造成主键自增不连续.适合数据量不大的表. ON DUPLICATE KEY UPDATE后面的条件 eg有如 ...

  2. mysql INSERT ... ON DUPLICATE KEY UPDATE语句

    网上关于INSERT ... ON DUPLICATE KEY UPDATE大多数文章都是同一篇文章转来转去,首先这个语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存 ...

  3. mysql 插入更新在一条sql ON DUPLICATE KEY UPDATE

    有时候需要进行数据操作的,如果有数据则更新数据, 没有数据则插入. 以往的做法是先查询,再根据查询结果进行判断,执行插入或更新操作 其实 有一种 ON DUPLICATE KEY UPDATE 语法, ...

  4. mysql ON DUPLICATE KEY UPDATE、REPLACE INTO

    INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO,两个命令可以处理重复键值问题,在实际上它之间有什么区别呢?前提条件是这个表必须有一个唯一索引或主键 ...

  5. INSERT ... ON DUPLICATE KEY UPDATE Syntax

    一 mybatis中返回自动生成的id 当有时我们插入一条数据时,由于id很可能是自动生成的,如果我们想要返回这条刚插入的id怎么办呢.在mysql数据中我们可以在insert下添加一个selectK ...

  6. INSERT ... ON DUPLICATE KEY UPDATE Syntax 专题

    ON DUPLICATE KEY UPDATE :不用用于批量,除 insert into t1  select * from t2 on duplicated key update k1=v1,k2 ...

  7. 批量插入或更新操作之ON DUPLICATE KEY UPDATE用法

    实际的开发过程中,可能会遇到这样的需求,先判断某一记录是否存在,如果不存在,添加记录,如果存在,则修改数据.在INSERT语句末尾指定ON DUPLICATE KEY UPDATE可以解决这类问题. ...

  8. Mysql常用sql语句(3)- select 查询语句基础使用

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 针对数据表里面的每条记录,select查询语句叫 ...

  9. MySQL各类SQL语句的加锁机制

    官网参考:https://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html MySQL把读操作分为两大类:锁定读和非锁定读(即locking ...

随机推荐

  1. linux视频学习7(ssh, linux启动过程分析,加解压缩,java网络编程)

    回顾数据库mysql的备份和恢复: show databases; user spdb1; show tables; 在mysql/bin目录下 执行备份: ./mysqldump -u root - ...

  2. Android实现GIF图片解码与播放

    Android实现GIF图片解码与播放 如何在Android中播放GIF图片呢?如果直接按以前的方法,分解图片,可能相对比较麻烦. 今天给大伙介绍一种新的方式,构造自己的Android图片解码帮助类, ...

  3. 学习笔记——代理模式Proxy

    代理模式,主要是逻辑和实现解耦.具体逻辑如何,由代理Proxy自己来设计,我们只需要把逻辑Subject交给代理即可. 主要应用场景,包括创建大开销对象时,使用代理来慢慢创建:远程代理,如网络不确定时 ...

  4. 转:Selenium2.0之grid学习总结

    (一)介绍: Grid的功能: 并行执行 通过一个中央管理器统一控制用例在不同环境.不同浏览器下运行 灵活添加变动测试机 (二)快速开始 这个例子将介绍如何使用selenium2.0的grid,并且注 ...

  5. [转]Linux下CodeBlocks的交叉编译

    原文链接:http://blog.sina.com.cn/s/blog_602f87700100kujh.html Sam一直是Makefile流,这些天需要移植一些游戏引擎模块.这些模块在其它嵌入式 ...

  6. Chapter 1 First Sight——16

    I drove around the school, following the line of traffic. 我开车绕学校随着交通线. 我开车穿过校园,紧跟着大部队. I was glad to ...

  7. ButterKnife-5.1.2.jar(较低版本的ButterKnife)使用方法

    ButterKnife注解是编译时注解,Xutils是运行时注解.很明显编译时注解性能更高 一.先配置好环境 1.在工程上右键,选Properties,然后选Java Compiler,选Annota ...

  8. onItemClick

    举个例子你会理解的更快:X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item. 如果你点了b这个item.如下: public void onItemC ...

  9. [转]Android下打印调试堆栈方法

    http://blog.csdn.net/freshui/article/details/9456889 打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错 ...

  10. oracle 日期相减

    oracle日期相减2012-02-10 12:18--MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份 SQL> select months_betwe ...