ER图:
问题: 如果缺少该产品的销售数量,则在缺席的情况下向库存中添加新商品 所有销售额的20%合计,以确保它没有缺货。
我试过了:
UPDATE products SET current_stock=
(SELECT p.current_stock FROM sales
INNER JOIN products AS p ON product_id=p.id
WHERE sold_count=(SELECT sold_count FROM sales
WHERE sold_count < sold_count * sold_count * 0.2 )) + 1;
但是我收到了这条错误消息:
ERROR: more than one row returned by a subquery used as an expression
我正在使用PostgreSQL
答案 0 :(得分:1)
您正尝试使用子查询更新current_stock
,因此子查询必须返回 ONE 行, ONE 列( ONE 值)。
您的查询返回多行 - 可能在此处:
SELECT sold_count
FROM sales
WHERE sold_count < sold_count * sold_count * 0.2
因为你要查询的每个sold_count
低于某个......你可能有数百万......
从子查询更新时,必须确保查询结果只是一个值。
答案 1 :(得分:1)
我找到了解决方案:
UPDATE products SET current_stock = current_stock + 1
WHERE id = (SELECT p.id FROM sales
INNER JOIN products AS p ON product_id=p.id
WHERE sold_count < sold_count * sold_count * 0.2
GROUP BY p.id);
我必须使用WHERE p.id = ...
答案 2 :(得分:0)
&lt;,=,&gt;,...等运算符期望从子查询返回标量结果。如果它返回多个,就像将苹果与一系列橙子进行比较。
我不完全理解这个问题,这是你想要做的吗?
UPDATE products
FROM ( SELECT S.product_id,
CASE WHEN S.sold_count >= SUM(S.sold_count) OVER() THEN P.current_stock + 1
ELSE P.current_stock
END adjusted_Stock
FROM sales S
INNER
JOIN product P
ON S.product_id = P.id
) AS UPDT
SET current_stock = UPDT.adjusted_Stock
WHERE id = UPDT.product_id;