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

IF EXISTS MySQL语法错误,但每一行单独工作,mysql,sql,Mysql,Sql,我有一个数据库,里面有几千个促销代码,我需要一些实现,当一个工人去获取一个ID时,它会检查他们的ID,如果它已经分配给促销代码,它会返回它,如果系统中没有ID,它会返回队列中的下一个促销代码。我现在使用的这段代码每行单独工作,但不是作为一个整体。我觉得这是一个简单的错误,但我需要另一双眼睛来观察它 如果存在,请从促销中选择促销代码,其中worker\u id='ABC123' 从促销活动中选择促销活动代码,其中worker\u id='ABC123' 其他的 将id值“ABC123”插入到Pro

我有一个数据库,里面有几千个促销代码,我需要一些实现,当一个工人去获取一个ID时,它会检查他们的ID,如果它已经分配给促销代码,它会返回它,如果系统中没有ID,它会返回队列中的下一个促销代码。我现在使用的这段代码每行单独工作,但不是作为一个整体。我觉得这是一个简单的错误,但我需要另一双眼睛来观察它

如果存在,请从促销中选择促销代码,其中worker\u id='ABC123' 从促销活动中选择促销活动代码,其中worker\u id='ABC123' 其他的 将id值“ABC123”插入到Promoworker\u中 其中Id=countworker\u Id+1

样本数据

身份证工作人员身份证促销代码 0 ABC123 1234567890 1 1928374657 29184373462


因此,如果ABC123被传递,它将返回1234567890,但如果我传递它DEF456,它将看到DEF456不在表中,将它插入Id=1的表中编辑:这是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

**不要问我为什么开始和结束只围绕if部分;我不知道为什么else也不需要它…

您似乎在寻找更新,而不是插入。您可以按以下方式进行更新:

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';
在更新中,notexists实际上是说,如果worker id已经在表中,则不执行任何操作。双重子查询是为了绕过MySQL的一个怪癖。我还建议在worker_id上使用唯一索引,因为您似乎不希望在表中使用重复的索引:

create unique index table(worker_id);

更新记录后,您可以使用select获取值。

您的查询对我来说没有意义。你能提供一些示例数据和你想要完成的事情吗?他正在尝试插入/更新不存在的地方?如果语法错误,你可以告诉他。如果SQL语法中有错误,则可能会重复“仍然获取错误”;请查看与MySQL服务器版本对应的手册,以了解要使用的正确语法,如“如果存在,请从promo中选择promo代码,其中供应商\u id='ABC123'BEGIN selec'位于第1行,我的错,这是我发布的T-Sql”。我看问题太快了。获取错误:1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第行“table Promo where worker_id='ABC123'和worker_id为null”附近使用的正确语法3@user3273370 . . . 这种MySQL技巧还需要一个表别名。