在MySQL中的UPDATE查询期间将值设置为参数

时间:2014-07-25 20:47:07

标签: mysql stored-procedures

在MySQL中有一个表包括ID,DAT,AMN,FLWC,FLWD,TYP。我想按DAT和ID排序表(DAT是排序中的第一个关键字)然后根据TYP从先前记录更新FLWC和FLWD。例如,如果0:先前记录和1:当前记录,则:

if typ1==d then (flwc1=flwc0 AND flwd1=flwd0+amn1)
if typ1==c then (flwc1=flwc0+amn AND flwd1=flwd0)

你可以看到flwc和flwd将被设置为下一条记录,其中一条将是AMN的总和,取决于TYP值。

更改前的表格:

-- id__dat__amn__flwc__flwd__typ
-- 1   10   100  0     0     d
-- 2   11   200  0     0     c
-- 3   12   300  0     0     d
-- 4   13   400  0     0     c
-- 5   14   500  0     0     d
-- 6   15   600  0     0     c
-- 7   16   700  0     0     d

更新后的表:

-- id__dat__amn__flwc__flwd__typ
-- 1   10   100  0     100   d
-- 2   11   200  200   100   c
-- 3   12   300  200   400   d
-- 4   13   400  600   400   c
-- 5   14   500  600   900   d
-- 6   15   600  1200  900   c
-- 7   16   700  1200  1600  d

我是在MS SQL服务器上做过的,但在这种情况下MySQL似乎很差(在更新查询期间设置值为参数),MS SQL Server中的解决方案:

declare @sumc decimal
declare @sumd decimal
set @sumc=0
set @sumd=0

update myTable set 
    @sumc+= case typ when 'c' then amn else 0 end, flwc=@sumc,
    @sumd+= case typ when 'd' then amn else 0 end, flwd=@sumd

我需要MySQL中的上述查询。感谢

2 个答案:

答案 0 :(得分:0)

可以使用MySQL完成。

一个可能有用的例子。

表:

CREATE TABLE `test` (
    `Id` INT(11) NOT NULL AUTO_INCREMENT,
    `Incrementar` INT(11) NOT NULL,
    PRIMARY KEY (`Id`)
);

插入测试记录:

INSERT INTO `test` (`Incrementar`) VALUES (0);
INSERT INTO `test` (`Incrementar`) VALUES (0);
INSERT INTO `test` (`Incrementar`) VALUES (0);
INSERT INTO `test` (`Incrementar`) VALUES (0);

更新:

SET @tempVariable = 1;

UPDATE test SET Incrementar = (@tempVariable:=@tempVariable+1)

结果:

Id  Incrementar
1   2
2   3
3   4
4   5

答案 1 :(得分:0)

我以前的回答就是一个例子。你需要的是:

SET @sumc=0; 
SET @sumd=0;

UPDATE myTable SET 
 flwc= (SELECT @sumc := IF(typ = 'c', amn + @sumc, @sumc)),
 flwd= (SELECT @sumd := IF(typ = 'd', amn + @sumd, @sumd));