mysql - 在 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 语句还是其他问题?
解决方案
这不是检查 ID 是否已在表中的正确方法。当您将SELECT
查询用作表达式时,它必须只返回一行。您可以使用:
IF NOT EXISTS (SELECT * FROM kund2Order WHERE kundId = kundId2) THEN
如果你想插入刚刚插入的行的自动增量kundOrder
,你应该使用LAST_INSERT_ID()
:
INSERT INTO kund2order VALUES (kundId2, LAST_INSERT_ID());
推荐阅读
- kubernetes - 仅针对给定路径的 nginx-ingress 基本身份验证?
- python - 如何在 Python 中更改元组项的顺序?
- c# - ASP.NET 和 C#:按钮完成处理后隐藏旋转轮
- android - 如何使 chromebook 上的 android 应用程序可用(react-native)
- android - 如何在 Android 快速网络库中将多个图像发送到后端
- oracle - 如何在 Oracle 中创建一个触发器,在更新数字之前触发并检查该数字是否被授权?
- tabs - gfortran 的 std 标记将输出 Wtabs 警告可能发生的情况
- distributed - 如何将 Ignite 配置为完整的分布式数据库?
- python - 使用 webbrowser 模块的属性错误
- python - name.sum() 返回单个记录而不是 python 中的记录总和