我正在开发一个会计软件,有时发票上有两次相同的项目id (每一个都有其唯一的序列号)。所以在卖掉这两件商品之后,我需要它的数量等于数量-1
我用这个声明来更新一些记录。
UPDATE `table1` SET `quantity` = CASE
WHEN id = 1 THEN quantity-1
WHEN id = 1 THEN quantity-1
END
WHERE id in (1)
使用此语句更新后,quantity
的值将忽略第二条语句
我怎么才能解决这个问题?
编辑
答案
谢谢..。我一个人找到了诀窍
UPDATE `table1` SET `quantity` = CASE
WHEN id = (1*(1/1)) THEN quantity-1
WHEN id = (1*(2/2)) THEN quantity-1
WHEN id = (1*(3/3)) THEN quantity-1
END
WHERE id in (1)
该记录将由同一个查询更新3次。
为什么我需要这个?
因为我的软件接受用户可以在同一个发票中多次添加相同的(产品ID),所以我需要查询为一个(产品ID)在同一个语句中多次更新数量
发布于 2014-10-06 04:01:16
我想这可能就是你想要的。我的表中有3次id=1
,因此mcount
设置为3
。由于where条件,没有更新ID=2
的行。
update table1
join (select id, count(*) as ct from table1 group by id) as ct_tbl
set mcount = ct_tbl.ct
where table1.id=1
mysql> select * from table1;
+------+--------+
| id | mcount |
+------+--------+
| 1 | 3 |
| 1 | 3 |
| 1 | 3 |
| 2 | 0 |
+------+--------+
4 rows in set (0.00 sec)
我不想劫持另一个答案,因为它是完全正确的,但我认为它需要更多的解释。
UPDATE `table1` SET `mcount` = CASE
WHEN id = 1 THEN 1
WHEN id = 1 THEN 2
END
WHERE id in (1)
这相当于..。(psuedo)
in the table table1
where the id = 1
if id = 1 then set mcount = 1
if id = 1 then set mcount = 2
由于使用了where
语句,我们已经知道我们将只选择id=1
所在的行。这些if
语句只会覆盖对方。我真的不知道你在找什么,但通常.
以下内容将向mcount
中添加一个
UPDATE `table1`
SET `mcount` = mcount + 1;
WHERE id in (1)
下面将切换mcount
值
UPDATE `table1`
SET `mcount` = CASE WHEN mcount = 1 THEN 2
WHEN mcount = 2 THEN 1 END
WHERE id in (1)
下面将切换mcount
值
UPDATE `table1`
SET `mcount` = CASE WHEN other_field = 'Y' THEN 1
WHEN other_field = 'N' THEN 2 END
WHERE id in (1)
使用多个ID
值.
UPDATE `table1`
SET `mcount` = CASE WHEN id = 1 THEN 1
WHEN id = 2 THEN 2
WHEN id = 3 THEN 3 END
WHERE id in (1,2,3)
这和..。
UPDATE `table1`
SET `mcount` = id
WHERE id in (1,2,3)
真正的问题是..。如果是ID=1,那么mcount应该是什么?
还有..。
set @row:=0;
update table1
set mcount = @row:=@row+1
where id = 1;
mysql> select * from table1;
+------+--------+
| id | mcount |
+------+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 0 |
+------+--------+
4 rows in set (0.00 sec)
发布于 2014-10-06 03:46:14
您的语句对于每种情况都有相同的条件,总是返回1(第一条语句),第二条语句将被忽略,因为它是相同的条件。
发布于 2017-01-13 00:44:16
谢谢..。我一个人找到了诀窍
UPDATE `table1` SET `quantity` = CASE
WHEN id = (1*(1/1)) THEN quantity-1
WHEN id = (1*(2/2)) THEN quantity-1
WHEN id = (1*(3/3)) THEN quantity-1
END
WHERE id in (1)
该记录将由同一个查询更新3次。
https://stackoverflow.com/questions/26209662
复制相似问题