Проблема SQL с вставкой в ​​оператор if - PullRequest
0 голосов
/ 17 марта 2019
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, которая просто использует значения по умолчанию, а затем взять недавно созданный идентификатор из этой строки в kundOrder и поместите его в новый ряд в kund2order (вместе с kundId).

По какой-то причине он просто дает мне (узел: 18328) UnhandledPromiseRejectionWarning: Ошибка: ER_BAD_NULL_ERROR: столбец 'kundId' не может быть нулевым

Я немного запутался в том, в чем проблема, обе таблицы пусты после того, как я вызвал эту процедуру. Проблема в моем утверждении if или в чем-то другом?

1 Ответ

1 голос
/ 17 марта 2019

Это неправильный способ проверить, есть ли идентификатор в таблице.Когда вы используете SELECT запрос в качестве выражения, он должен возвращать только одну строку.Вы можете использовать:

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

И если вы хотите вставить автоинкремент строки, которая была только что вставлена ​​в kundOrder, вы должны использовать LAST_INSERT_ID():

INSERT INTO kund2order VALUES (kundId2, LAST_INSERT_ID());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...