首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果存在MySQL语法错误,但每行都可以单独工作

如果存在MySQL语法错误,但每行都可以单独工作
EN

Stack Overflow用户
提问于 2014-03-13 04:07:52
回答 2查看 625关注 0票数 0

我有一个数据库中有几千个促销代码,我需要一些实现的东西,当一个工人去得到一个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处的表中

EN

回答 2

Stack Overflow用户

发布于 2014-03-13 04:42:41

编辑:这是T-Sql,我读问题太快了,没有注意到OP使用的是MySQL。

在使用if语句时,您需要开始和结束。

代码语言:javascript
运行
复制
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也不需要它……

票数 0
EN

Stack Overflow用户

发布于 2014-03-13 04:58:02

您似乎要找的是update,而不是insert。您可以按如下方式进行更新:

代码语言:javascript
运行
复制
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;

然后返回你想要的值是:

代码语言:javascript
运行
复制
select promo_code
from table t
where worker_id = 'ABC123';

update中,not exists实际上是在说“如果worker id已经在表中,就不要做任何事情”。双精度子查询是为了绕过MySQL的一个怪癖。我还建议在worker_id上使用唯一索引,因为您似乎不希望表中存在重复项:

代码语言:javascript
运行
复制
create unique index table(worker_id);

一旦记录被更新,您就可以使用select获取该值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22362677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档