首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:插入...IF COUNT <= INVENTORY否则无任何内容

问MySQL:插入...IF COUNT <= INVENTORY否则无任何内容
EN

Stack Overflow用户
提问于 2019-12-19 22:28:53
回答 1查看 46关注 0票数 0

我有一个仓库系统,您可以在其中插入或删除具有条形码和计数编号的产品。现在,我想在执行事务之前先检查库存中是否有足够的产品。例如:如果库存中有足够的产品,则插入事务,否则不显示任何内容(或显示错误)

我试过这段代码:

代码语言:javascript
复制
SELECT CASE WHEN 7 <= (SELECT i.count FROM inventory i WHERE barcode = '123')
THEN 
    INSERT INTO transactions 
           (companyid,barcode,fromlocation,tolocation,count) 
    VALUES (1,'123','Warehouse','Factory',7)
END

但上面写着:

代码语言:javascript
复制
1. Unexpected keyword. (near "INTO" at position 88)
2. Unexpected end of CASE expression (near " " at position 87)
3. Unrecognized keyword. (near "END" at position 198)

很明显,这是错误的语法,但我到处搜索,都找不到提供这种情况的if语句。

谁能告诉我怎么写正确的if语句?

我知道我可以先执行一条select语句,比较这些值,然后插入事务(使用MySQL beginTransaction和commit),但我非常确定必须有另一种方法。(当我谈论事务时,我不是谈论来自MySQL的事务,而是来自我的数据库的事务)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-19 22:37:31

我还没有对此进行测试,但它应该可以完成工作。

在TSQL中,您可以将IF和IIF分开,IIF仅在SELECT语句中使用(作用与您使用的CASE相同),而IF用作标准的IF (与任何其他语言一样)。在MySQL中,这两个是相同的,只是IF(或者在你的例子中SELECT语句中的CASE ),在这种情况下,为了得到你想要的结果,下面的代码应该可以工作:

代码语言:javascript
复制
DELIMITER $$

CREATE PROCEDURE test() 
BEGIN
    IF 7 <= (SELECT i.count FROM inventory WHERE barcode = '123') THEN
        INSERT INTO transactions 
        (companyid,barcode,fromlocation,tolocation,count) 
        VALUES (1,'123','Warehouse','Factory',7);
    END IF;
END$$

DELIMITER ;

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

https://stackoverflow.com/questions/59411743

复制
相关文章

相似问题

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