首页 > 解决方案 > 如何创建条件来自两个表的过程?

问题描述

我想创建一个如下所示的过程:

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 条件下。任何帮助表示赞赏!

标签: mysql

解决方案


如果表之间有多个匹配的行,则不能将它们全部存储在一个变量中。

您可以使用游标遍历所有匹配的行,但更简单的方法是JOINUPDATE. ALEFT 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;

推荐阅读