我有一个数据库到位,有几千个促销代码,我需要一些实现,当一个工人去获取一个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
答案 0 :(得分:0)
使用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部分;我不知道为什么其他人也不需要它......
答案 1 :(得分:0)
您似乎在寻找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
中,如果工作人员ID已经在表格中,那么not exists
基本上就是说不做任何事情"。双子查询是绕过MySQL的怪癖。我还建议在worker_id
上使用唯一索引,因为您似乎不想在表中重复:
create unique index table(worker_id);
更新记录后,您可以使用select
获取值。