我正在使用会计软件,有时发票包含相同的商品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)
答案 0 :(得分:1)
你的语句对每种情况都有相同的条件,总是会返回1(第一个语句),第二个语句将被忽略,因为它是相同的条件。
答案 1 :(得分:1)
我认为这可能实际上就是你想要的。我的表中有id=1
3次,因此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)
相当于......(伪造)
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)
答案 2 :(得分:1)
谢谢......我自己找到了这个伎俩
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次