【发布时间】:2015-12-04 08:01:29
【问题描述】:
我有两张表,一张包含参与者及其排名,另一张包含优惠券代码及其排名。我想为每个参与者分配一个具有正确等级的优惠券代码,但当然要确保每个优惠券代码只使用一次。
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。
【问题讨论】:
-
为了确保凭证仅在您可以将
UNIQUE KEY添加到A.voucherid时使用,但您将无法使用该查询更新所有行,因为它会尝试插入重复,整个更新将失败