Mysql 如何在更新查询中按行为获取DISTINCT/GROUP

Mysql 如何在更新查询中按行为获取DISTINCT/GROUP,mysql,sql,sql-update,Mysql,Sql,Sql Update,我得到一个错误:错误号:1242子查询返回的行数超过1行 因为我的UPDATE子查询产生重复值。我知道DISTINCT和groupby可以删除SELECTquery中的重复值。如何在UPDATEquery中修复它。我的问题就在这里 UPDATE product_stock AS S LEFT JOIN product_purchase_item AS I ON S.product_id=I.product_id AND S.product_size=I.product

我得到一个错误:错误号:1242子查询返回的行数超过1行

因为我的
UPDATE
子查询产生重复值。我知道
DISTINCT
groupby
可以删除
SELECT
query中的重复值。如何在
UPDATE
query中修复它。我的问题就在这里

UPDATE 
    product_stock AS S
LEFT JOIN
    product_purchase_item AS I
ON
     S.product_id=I.product_id AND S.product_size=I.product_size
LEFT JOIN
    product_purchases AS P
ON
     I.product_purchase_item_id=P.product_purchase_item_id  
SET
    S.product_size_quantity=S.product_size_quantity+I.quantity
WHERE
    S.product_id=?
AND
    S.product_size=?
假设,如果我在
中转换它,请选择
查询

SELECT
 S.*
FROM
 product_stock AS S
LEFT JOIN
 product_purchase_item AS I
ON
 S.product_id=I.product_id AND S.product_size=I.product_size
LEFT  JOIN
 product_purchases AS P
ON
 I.product_purchase_item_id=P.product_purchase_item_id
product_stock_id product_id product_size product_quantity 10 216 1 1 11 216 5 1 查询返回

product_stock_id product_id product_size product_quantity 10 216 1 1 10 216 1 1 11 216 5 1
但是,如何在我的
UPDATE
子查询中检索类似上述数据(唯一值)?是否可以在我的
更新
查询中使用
DISTINCT
关键字或类似的内容

如果数据完全相同,只需使用
“min()”
,而无需分组依据/distinct

UPDATE 
    product_stock AS S
LEFT JOIN
    product_purchase_item AS I
ON
     S.product_id=I.product_id AND S.product_size=I.product_size
LEFT JOIN
    product_purchases AS P
ON
     I.product_purchase_item_id=P.product_purchase_item_id  
SET
    --   CHANGE HERE ===============================>
    S.product_size_quantity=S.product_size_quantity+MIN(I.quantity)
WHERE
    S.product_id=?
AND
    S.product_size=?

这应该能奏效。是否有理由将product_purchases表包括在内,因为它在您的查询中似乎是多余的

UPDATE product_stock SET product_size_quantity = product_size_quantity + I.quantity

from product_stock
INNER JOIN (select product_id, product_size, sum(quantity) from product_purchase_item group by product_id, product_size) AS I
ON product_stock.product_id=I.product_id AND product_stock.product_size=I.product_size

WHERE product_stock.product_id=?
AND product_stock.product_size=?

同样的问题。我不明白,为什么使用MIN()?。可能是在设置之前发现的问题。因为在这里它已经得到了重复值。是的,我在
product\u purchases
trigger
上使用了插入后的
。所以我需要一张产品采购表。这是我的。我在这里间接使用了
groupby
。但它显示出同样的错误