我有一个数据库,有几千个促销码,我需要实现的东西,当一个工作人员去得到一个ID,它会检查他们的ID,如果它已经分配给一个促销码,将返回它,如果有ID不在系统将返回队列中的下一个促销码。这段代码我现在每一行单独工作,但不是作为一个整体。我觉得这是个简单的错误,但我需要另一双眼睛来检查它
IF EXISTS(select promo_code from Promo where worker_id='ABC123')
select promo_code from Promo where worker_id='ABC123'
ELSE
insert into Promo(worker_id) values('ABC123')
where Id=count(worker_id)+1
Id worker_id promo_code
0 ABC123 1234567890
1 1928374657
2 9184373462
所以如果ABC123被传递,它会返回给我1234567890,但是如果我传递给它DEF456,它会看到DEF456不在表中,将它插入到Id=1
您似乎正在寻找update
,而不是insert
。你可以这样更新:
update table t
set worker_id = 'ABC123'
where not exists (select * from (select 1 from table t2 where worker_id = 'ABC123') t) and
worker_id is null
order by id
limit 1;
然后返回你想要的值:
select promo_code
from table t
where worker_id = 'ABC123';
在update
中,not exists
本质上是说"如果工人id已经在表中,不要做任何事情"。双子查询是为了解决MySQL的一个怪癖。我还建议在worker_id
上使用唯一索引,因为您似乎不希望表中出现重复项:
create unique index table(worker_id);
记录更新后,您可以使用select
获取值。
编辑:这是T-Sql,我看问题太快了,没有注意到OP正在使用MySQL。
使用if语句时需要开始和结束。
IF EXISTS(select promo_code from Promo where worker_id='ABC123')
BEGIN
select promo_code from Promo where worker_id='ABC123'
END
ELSE
insert into Promo(worker_id) values('ABC123')
where Id=count(worker_id)+1
http://technet.microsoft.com/en-us/library/ms182717.aspx **不要问我为什么开头和结尾只有if部分;