Mysql 如何在更新查询中按行为获取DISTINCT/GROUP
我得到一个错误:错误号:1242子查询返回的行数超过1行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
因为我的
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 purchasestrigger
上使用了插入后的。所以我需要一张产品采购表。这是我的。我在这里间接使用了groupby
。但它显示出同样的错误