【问题标题】:SQL trouble with insert in if statement在 if 语句中插入 SQL 问题
【发布时间】:2019-03-17 15:40:14
【问题描述】:
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 一起)。

由于某种原因,它只给了我 (node:18328) UnhandledPromiseRejectionWarning: E​​rror: ER_BAD_NULL_ERROR: Column 'kundId' cannot be null

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

【问题讨论】:

  • 除其他问题外,您的第一个IF 具有明显的潜在问题,即RHS 上的子查询可能返回多个记录。也许您打算使用WHERE NOT IN ...,但无论如何,这将有助于您的问题更好地解释您在这里尝试做什么。
  • 如果 kundId2 不匹配 kund2order 表中的任何 kundId 我想执行下面的插入语句。如果它确实匹配某些东西,那么我不想发生任何事情
  • 这不是您检查kundid2 是否在表格中的方式。
  • @Barmar 那我该怎么做呢?

标签: mysql database stored-procedures


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多