MySQL语法错误,但每一行单独工作



我有一个数据库,有几千个促销码,我需要实现的东西,当一个工作人员去得到一个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部分;

最新更新