3
我有两个表,一个带有参与者及其排名,另一个带有优惠券代码及其排名。我想为每位参与者分配正确等级的优惠券代码,但确保每张优惠券代码仅使用一次,当然。MySQL在更新查询中仅分配匹配一次
Table A: Table B:
pid | name | rank | voucherid voucherid | rank | code | used
1 | Max | 10 | null 1 | 10 | AAA | 0
2 | Joe | 20 | null 2 | 10 | BBB | 0
3 | Eva | 10 | null 3 | 20 | CCC | 0
4 | 20 | DDD | 0
我正在寻找一个更新查询产生这样的结果:
Table A:
pid | name | rank | voucherid
1 | Max | 10 | 1
2 | Joe | 20 | 3
3 | Eva | 10 | 2
下不起作用,因为它赋予了相同的优惠券到多个参与者:
UPDATE A
JOIN B ON A.`rank` = B.`rank`
SET A.`voucherid` = B.`voucherid`
WHERE
A.`voucherid` IS NULL AND
B.`used` = 0
;
-
Result:
Table A:
pid | name | rank | voucherid
1 | Max | 10 | 1
2 | Joe | 20 | 3
3 | Eva | 10 | 1 !!!
之后当然我会更新优惠券表B,将used
列设置为1
。
要确保凭证只有在您可以向'A.voucherid'添加'UNIQUE KEY'时才会使用,但是您将无法使用该查询更新所有行,因为它会尝试插入重复项,整个更新将失败 –