我对此感到困惑,需要一些帮助。
我有这些表格:
1)PRODUCTOS(产品)
+-------------+-----------------------------+---------------+------------------+
| PRODUCTO_NO | DESCRIPCION | PRECIO_ACTUAL | STOCK_DISPONIBLE |
+-------------+-----------------------------+---------------+------------------+
| 10 | MESA DESPACHO MOD. GAVIOTA | 550.00 | 50 |
| 20 | SILLA DIRECTOR MOD. BUFALO | 670.00 | 25 |
| 30 | ARMARIO NOGAL DOS PUERTAS | 460.00 | 20 |
| 50 | ARCHIVADOR CEREZO | 1050.00 | 20 |
| 60 | CAJA SEGURIDAD MOD B222 | 280.00 | 15 |
| 70 | DESTRUCTORA DE PAPEL A3 | 450.00 | 25 |
| 80 | MODULO ORDENADOR MOD. ERGOS | 550.00 | 25 |
+-------------+-----------------------------+---------------+------------------+
和
2)PEDIDOS(订单)
+-----------+-------------+------------+----------+--------------+
| PEDIDO_NO | PRODUCTO_NO | CLIENTE_NO | UNIDADES | FECHA_PEDIDO |
+-----------+-------------+------------+----------+--------------+
| 1000 | 20 | 103 | 3 | 1999-10-06 |
| 1001 | 50 | 106 | 2 | 1999-10-06 |
| 1002 | 10 | 101 | 4 | 1999-10-07 |
| 1003 | 20 | 105 | 4 | 1999-10-16 |
| 1005 | 30 | 105 | 2 | 1999-10-20 |
| 1006 | 70 | 103 | 3 | 1999-11-03 |
| 1007 | 50 | 101 | 2 | 1999-11-06 |
| 1008 | 10 | 106 | 6 | 1999-11-16 |
| 1009 | 20 | 105 | 2 | 1999-11-26 |
| 1011 | 30 | 106 | 2 | 1999-12-15 |
| 1012 | 10 | 105 | 3 | 1999-12-06 |
| 1013 | 30 | 106 | 2 | 1999-12-06 |
| 1014 | 20 | 101 | 4 | 2000-01-07 |
| 1015 | 70 | 105 | 4 | 2000-01-16 |
| 1017 | 20 | 105 | 6 | 2000-01-20 |
+-----------+-------------+------------+----------+--------------+
现在,我要做的是更新表'PROXTOS'中的'STOCK_DISPPONIBLE'(可用库存)列,从中减去每个库存商品的订购总数。这意味着,例如我将Table作为产品编号10,我必须完成所有订单并查看已订购的表数,并从可用表的总数中减去该数字。我提出的不起作用(好吧,如果它确实有效,我就不会在这里)。
update PRODUCTOS set STOCK_DISPONIBLE= (STOCK_DISONIBLE - (select sum(p1.UNIDADES) from PEDIDOS p1 join PRODUCTOS p2 on p1.PRODUCTO_NO = p2.PRODUCTO_NO));
这可能是逻辑在这里绝对不可靠。但是我迷失了这个,如果有人可以帮助我,我会非常感激。
答案 0 :(得分:2)
我认为你想要一个简单的相关子查询:
update PRODUCTOS p
set p.STOCK_DISPONIBLE = (p.STOCK_DISONIBLE -
(select sum(pe.UNIDADES)
from PEDIDOS pe
where pe.PRODUCTO_NO = p.PRODUCTO_NO
)
);
子查询中的join
是不必要的。
答案 1 :(得分:0)
您可以将UPDATE
与JOIN
一起用于表格PEDIDOS
的汇总版本:
UPDATE PRODUCTOS AS p1
JOIN (
SELECT PRODUCTO_NO, SUM(UNIDADES) AS total_units
FROM PEDIDOS
GROUP BY PRODUCTO_NO
) AS p2 ON p1.PRODUCTO_NO = p2.PRODUCTO_NO
SET p1.STOCK_DISPONIBLE = p1.STOCK_DISPONIBLE - p2.total_units