首页 > 解决方案 > 在 if 语句中插入 SQL 问题

问题描述

DROP PROCEDURE IF EXISTS kund2orderNew;
DELIMITER ;;
CREATE PROCEDURE kund2orderNew(kundId2 INT)
BEGIN
IF kundId2 <> (SELECT kundId FROM kund2order) THEN
    INSERT INTO kundOrder VALUES ();
    INSERT INTO kund2order VALUES (kundId2, (SELECT id FROM kundOrder)); 
END IF;
END
;;
DELIMITER ;

好吧,我在这里做错了吗?我想要做的是检查 kundId 是否在 kund2order 中,如果不是,那么我想要做的是在 kundOrder 表中创建一个仅使用默认值的新行,然后从该行中获取最近创建的 id kundOrder 并将其放在 kund2order 的新行中(与 kundId 一起)。

出于某种原因,它只是给了我(节点:18328)UnhandledPromiseRejectionWarning:错误:ER_BAD_NULL_ERROR:列'kundId'不能为空

我对问题是什么感到有些困惑,在我调用此过程后,两个表都是空的。问题是我的 if 语句还是其他问题?

标签: mysqldatabasestored-procedures

解决方案


这不是检查 ID 是否已在表中的正确方法。当您将SELECT查询用作表达式时,它必须只返回一行。您可以使用:

IF NOT EXISTS (SELECT * FROM kund2Order WHERE kundId = kundId2) THEN

如果你想插入刚刚插入的行的自动增量kundOrder,你应该使用LAST_INSERT_ID()

INSERT INTO kund2order VALUES (kundId2, LAST_INSERT_ID());

推荐阅读