比如表中有以下数据:
REPLACE INTO `table` (`a`,`value1`,`value2`)
VALUES (1,21,31),(2,22,32),(3,23,33);
a是主键现在想要批量更新成某些value1=value1+1,某些value2=value2+1
比如希望结果是 (1,22,31),(2,22,33),(3,24,34)我尝试用
REPLACE INTO `table` (`a`,`value1`,`value2`)
VALUES (1,`value1` + 1,`value2`),(2,`value1`,`value2` + 1),(3,`value1` + 1,`value2` + 1);
或者
INSERT INTO `table`(`a`,`value1`,`value2`)
VALUES (1,`value1` + 1,`value2`),(2,`value1`,`value2` + 1),(3,`value1` + 1,`value2` + 1)
ON DUPLICATE KEY UPDATE `value1`=VALUES(`value1`),`value2`=VALUES(`value2`);
都不能实现,这些操作貌似都是先把原值删除,然后重新进行复写更新的我想要批量更新某些值,这些值是在原有基础上发生变化的,我该如何写,谢谢啦
REPLACE INTO `table` (`a`,`value1`,`value2`)
VALUES (1,21,31),(2,22,32),(3,23,33);
a是主键现在想要批量更新成某些value1=value1+1,某些value2=value2+1
比如希望结果是 (1,22,31),(2,22,33),(3,24,34)我尝试用
REPLACE INTO `table` (`a`,`value1`,`value2`)
VALUES (1,`value1` + 1,`value2`),(2,`value1`,`value2` + 1),(3,`value1` + 1,`value2` + 1);
或者
INSERT INTO `table`(`a`,`value1`,`value2`)
VALUES (1,`value1` + 1,`value2`),(2,`value1`,`value2` + 1),(3,`value1` + 1,`value2` + 1)
ON DUPLICATE KEY UPDATE `value1`=VALUES(`value1`),`value2`=VALUES(`value2`);
都不能实现,这些操作貌似都是先把原值删除,然后重新进行复写更新的我想要批量更新某些值,这些值是在原有基础上发生变化的,我该如何写,谢谢啦
解决方案 »
- MYSQL 怎么模糊搜索啊。咋我实现不了的
- 哪位能帮我看看下面,从维基百科下载的sql文件,为什么在windows下导入全是乱码,我试着改了所有的字符集都不行,但是在linux下面就可以,求解?
- 创建存储过程的语法问题
- 求助: 如何用一条SQL语句统计多个非关联表记录
- 如何能让mysql日期时间字段支持2010-07-06 03:44:10.182
- 有一个数据表,我想实现这样的功能,怎么做呢,请高手帮忙看看
- 急:为什么创建视图的时候有UNION就提示语句有错误
- [Mysql]谁帮我解决这个中文问题,100分相送!不够还可以再加!
- 提一个可能大家认为简单的问题,不要见笑:如何用select取得表中第一个纪录
- 关于join查询时 where的执行时间
- 学习MySQL官方文档,是看5.6还是5.5呢?
- redhat6.4下mysql的链接问题
create procedure p_test()
begin
declare i,v1,v2 int;
set i=1;
set v1=(select value1 from test order by value1 desc limit 1);
set v2=(select value1 from test order by value2 desc limit 1);
if v1 is null then
set v1=100;
end if;
if v2 is null then
set v2=200;
end if;
while i <= 10 do
set v1=v1+1;
set v2=v2+1;
set i=i+1;
insert into test (value1,value2) values (v1,v2);
end while;
end;
$$
delimiter ;
create table tabx(userId int primary key ,integral1 int,integral2 INT);
-- REPLACE INTO tabx(userId,integral1,integral2)
-- VALUES (1,21,31),(2,22,32),(3,23,33);-- 存在1,2,3的用户,就增加100积分.不存在分别给11,21,31积分
INSERT INTO tabx(userId,integral1,integral2)
VALUES (1,11,12),(2,21,22),(4,31,32)
ON DUPLICATE KEY UPDATE integral1=integral1+100,integral2=integral2+100;
select * from tabx;
你好,我需要的是区别不同的情况,比如你例子里的100,并不需要每一行的该列都加100,这怎么办啊
那你只能在update时,使用case when 了。
但这样也不好吧。。
能说出你的原始需求吗?
INSERT INTO tabx(userId,integral1,integral2)
VALUES (1,11,12),(2,21,22),(4,31,32)
ON DUPLICATE KEY UPDATE
integral1=integral1+(case
when userId=1 then 100
when userid=2 then 200 else 0 END)
,integral2=integral2+100;
你好,我需要的是区别不同的情况,比如你例子里的100,并不需要每一行的该列都加100,这怎么办啊
那你只能在update时,使用case when 了。
但这样也不好吧。。
能说出你的原始需求吗?
INSERT INTO tabx(userId,integral1,integral2)
VALUES (1,11,12),(2,21,22),(4,31,32)
ON DUPLICATE KEY UPDATE
integral1=integral1+(case
when userId=1 then 100
when userid=2 then 200 else 0 END)
,integral2=integral2+100;
一张月度统计表,每一行表示一家店各种商品在一小时内的库存的变动情况,一种商品一列,如果当天该店该商品有变动,就会在原有基础上+1(统计的是变动次数,不是库存变化量,比如一个人买了6瓶水,算+1,两个人各买2平水,算+2,比如这个人同时买了几种商品,就同时更新相应的几列),几百家店就几百行*30*24,做大数据统计用
数据引用的是另一张库存表,库存有变化时,会写这张表
我该如何表达+1这种状况呢,实在不行的话我就只能在服务器增加变量来存储这个变动次数了
你好,我需要的是区别不同的情况,比如你例子里的100,并不需要每一行的该列都加100,这怎么办啊
那你只能在update时,使用case when 了。
但这样也不好吧。。
能说出你的原始需求吗?
INSERT INTO tabx(userId,integral1,integral2)
VALUES (1,11,12),(2,21,22),(4,31,32)
ON DUPLICATE KEY UPDATE
integral1=integral1+(case
when userId=1 then 100
when userid=2 then 200 else 0 END)
,integral2=integral2+100;
一张月度统计表,每一行表示一家店各种商品在一小时内的库存的变动情况,一种商品一列,如果当天该店该商品有变动,就会在原有基础上+1(统计的是变动次数,不是库存变化量,比如一个人买了6瓶水,算+1,两个人各买2平水,算+2,比如这个人同时买了几种商品,就同时更新相应的几列),几百家店就几百行*30*24,做大数据统计用
数据引用的是另一张库存表,库存有变化时,会写这张表
我该如何表达+1这种状况呢,实在不行的话我就只能在服务器增加变量来存储这个变动次数了我是楼主,谢谢啦