问题描述
我有一张桌子,上面有预先存在的赠品代码,我需要选择一个或多个行,然后用个人识别码,客户代码和“保留”状态更新每行的三列。这样可以保留每一行,直到收到我们客户的API的响应为止。
表格如下:
code identification customer_code status
-----------------------------------------------------------------
81Ow3tCs1nNwxKu -- -- available
I1NdH9F22S7RhU3 -- -- available
Xc942LWe8Z6nt8x -- -- available
zcLMRO8kSeM7S06 -- -- available
K94erORvzSsU0ik -- -- available
对此进行了尝试,但出现了错误:
UPDATE promo_codes
SET
identification='12345',customer_code='67890',status='reserved'
FROM
(SELECT code FROM promo_codes WHERE status='available' LIMIT 2);
然后我尝试了REPLACE INTO,但也出现了错误:
REPLACE INTO promo_codes(identification,customer_code,status)
VALUES('12345','67890','reserved')
WHERE
(SELECT code FROM promo_codes WHERE status='available' LIMIT 2);
我不知道该怎么办。有人可以给我一个主意吗? 非常感谢您的帮助。
解决方法
稍加重写即可编写代码
您应该考虑添加ORDER BY RAND(),因为没有订单的LIMIT毫无意义
CREATE TABLE promo_codes ( `code` VARCHAR(15),`identification` VARCHAR(20),`customer_code` VARCHAR(20),`status` VARCHAR(9) ); INSERT INTO promo_codes (`code`,`identification`,`customer_code`,`status`) VALUES ('81Ow3tCs1nNwxKu','--','available'),('I1NdH9F22S7RhU3',('Xc942LWe8Z6nt8x',('zcLMRO8kSeM7S06',('K94erORvzSsU0ik','available');
UPDATE promo_codes SET identification='12345',customer_code='67890',status='reserved' WHERE status='available' LIMIT 2;
SELECT * FROM promo_codes
code | identification | customer_code | status :-------------- | :------------- | :------------ | :-------- 81Ow3tCs1nNwxKu | 12345 | 67890 | reserved I1NdH9F22S7RhU3 | 12345 | 67890 | reserved Xc942LWe8Z6nt8x | -- | -- | available zcLMRO8kSeM7S06 | -- | -- | available K94erORvzSsU0ik | -- | -- | available
db 提琴here