我想创建一个看起来像这样的过程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `transformare_in_imprumut`()
MODIFIES SQL DATA
BEGIN
DECLARE stoc_actual INT(4);
SELECT stoc INTO stoc_actual FROM carti WHERE
carti.idCarte=rezervari.idCarte;
IF(stoc_actual >0) THEN
UPDATE carti set stoc=stoc-1 WHERE carti.idCarte=rezervari.idCarte;
INSERT INTO imprumuturi(idCarte)
SELECT idCarte FROM rezervari;
ELSE
UPDATE carti set stoc=stoc+1;
END IF;
END;
问题是我想在满足WHERE条件时更新imprumuturi表。但是此过程不起作用,因为我正在比较两个不同表中的两个值。我的问题是:如何从两个表中获取两个值并在WHERE条件下进行比较。 任何帮助表示赞赏!
答案 0 :(得分:0)
如果表之间有多行匹配,则不能将它们全部存储在一个变量中。
您可以使用光标在所有匹配的行中循环,但是更简单的方法是将JOIN
放在UPDATE
中。 LEFT JOIN
将允许您根据行在另一个表中是否匹配来进行正确的更新。
UPDATE carti
LEFT JOIN rezervari ON carti.idCarte = reservari.idCart
SET carti.stoc = IF(reservari.idCart IS NULL, stoc+1, stoc-1);
INSERT INTO imprumuturi (idCart)
SELECT idCarte FROM rezervari;