【问题标题】:Error #1242 Subquery returns more than 1 row when update错误 #1242 更新时子查询返回多于 1 行
【发布时间】:2013-08-31 13:07:02
【问题描述】:

这是我以前的question。我解决不了问题。我更新了我的代码,并且间接使用了GROUP BY。但同样的问题显示。子查询返回重复值。其实我做了一个TRIGGER,所以我想如果show trigger,就会明白了

--
-- Triggers `product_purchases`
--
DROP TRIGGER IF EXISTS `change_stock_when_purchases`;
DELIMITER //
CREATE TRIGGER `change_stock_when_purchases` AFTER INSERT ON `product_purchases`
 FOR EACH ROW BEGIN
  DECLARE X INTEGER;
  SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id );
  IF NEW.product_size =X  THEN
    UPDATE
        product_stock as S1
        INNER JOIN
        (
        SELECT
            S.product_stock_id,I.quantity 
        FROM 
            product_stock AS S
        INNER JOIN
            product_purchase_item AS I 
        ON
            S.product_id=I.product_id AND S.product_size=I.product_size
        INNER JOIN
            product_purchases AS P
        ON
            I.product_purchase_item_id=P.product_purchase_item_id
        WHERE
            P.product_purchase_id=NEW.product_purchase_id
        GROUP BY 
            S.product_stock_id
        )
        AS M
    ON 
        S1.product_stock_id=M.product_stock_id
    SET
        S1.product_size_quantity=S1.product_size_quantity+M.quantity;
    ELSE
    INSERT INTO
        product_stock (product_id,product_size,product_size_quantity)
        SELECT
            product_id,product_size, quantity
        FROM
            product_purchase_item
        WHERE
            product_purchase_item_id=NEW.product_purchase_item_id;
  END IF;
END
//
DELIMITER ;

product_stock 上更新相同的product_id 的不同product_size 时出现问题

【问题讨论】:

  • 一些示例数据会有所帮助。一个问题 - 在你的内部连接 ​​where 子句应该包含 product_too?即像 P.product_purchase_id = NEW.product_purchase_id AND s.product_id = NEW.product_id。希望这会有所帮助
  • @AndaIancu 我还添加了 S.product_id=NEW.product_id AND S.product_size=NEW.product_size 但同样的问题
  • 考虑提供表架构和示例数据。它可能会大大提高您获得所需答案的机会。
  • 看到这个question

标签: mysql sql triggers sql-update


【解决方案1】:

您的代码中最可疑的子查询是这个:

SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id );

product_stock 表中有重复项吗?这很容易确定:

select product_id
from product_stock
group by product_id
having count(*) > 1;

如果你这样做,你可以选择其中之一:

SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id limit 1);

【讨论】:

  • 感谢它现在可以工作了。我将 X 查询更改为 SET X = (SELECT product_size FROM product_stock WHERE product_id = NEW.product_id AND product_size=NEW.product_size);
猜你喜欢
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多