[英]MySQL query update with subquery multiple values
我需要根据带来超过 1 个值的子查询的结果更新表,但是使用下面的查询我得到错误返回“子查询返回超过 1 行”。 我想知道是否可以创建一个“循环”来更新下面子查询中显示的每个结果的值。
完整查询
UPDATE estoque_tamanhos tam
SET tam.qtde = tam.qtde - IF(NEW.tipo = 'K', NEW.qtde_prod * NEW.qtde_lote, NEW.qtde_prod)
WHERE tam.estoques_id = (SELECT estoques_id
FROM combo_estoque
WHERE produtos_id = NEW.produtos_id)
AND UPPER(tam.tamanho) = UPPER(NEW.tamanho_prod);
返回 2 个或更多值的子查询。
SELECT estoques_id FROM combo_estoque WHERE produtos_id = NEW.produtos_id
结果
produtos_id | estoques_id |
---|---|
246 | 54 |
246 | 207 |
在理想情况下,我的查询将在第二个......第三个......之后执行第一个值,而不重复前面的值。
您应该使用游标创建一个存储过程来迭代查询的每个结果。
CREATE PROCEDURE UPDATING_ROWS(PRODUTO_ID INT, qtde_prod INT, qtde_lote INT, TIPO INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE estoque_;
DECLARE cursor FOR SELECT estoques_id FROM combo_estoque WHERE produtos_id = NEW.produtos_id) AND UPPER(tam.tamanho) = UPPER(NEW.tamanho_prod)
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO estoque_;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE estoque_tamanhos tam SET tam.qtde = tam.qtde - IF(TIPO = 'K',
qtde_prod * qtde_lote, qtde_prod)
WHERE tam.estoques_id = estoque_;
END LOOP;
END
您必须创建一个像这样的存储过程来迭代您的 select 查询的每个结果。 您可以在此链接中阅读有关此内容的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.