如果EXISTS MySQL语法错误,但每行都单独工作

时间:2014-03-12 20:07:52

标签: mysql sql

我有一个数据库到位,有几千个促销代码,我需要一些实现,当一个工人去获取一个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

2 个答案:

答案 0 :(得分:0)

编辑:这是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部分;我不知道为什么其他人也不需要它......

答案 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获取值。