我有一个数据库中有几千个促销代码,我需要一些实现的东西,当一个工人去得到一个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处的表中
发布于 2014-03-13 04:42:41
编辑:这是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
**不要问我为什么begin和end只涉及if部分;我不知道为什么else也不需要它……
发布于 2014-03-13 04:58:02
您似乎要找的是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
实际上是在说“如果worker id已经在表中,就不要做任何事情”。双精度子查询是为了绕过MySQL的一个怪癖。我还建议在worker_id
上使用唯一索引,因为您似乎不希望表中存在重复项:
create unique index table(worker_id);
一旦记录被更新,您就可以使用select
获取该值。
https://stackoverflow.com/questions/22362677
复制相似问题