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'時纔會使用,但是您將無法使用該查詢更新所有行,因爲它會嘗試插入重複項,整個更新將失敗 –