我对此感到困惑,需要一些帮助。
我有这些表:
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 |
+-----------+-------------+------------+----------+--------------+
现在,我要做的是更新表“PRODUCTOS”中的列“STOCK_DISPPONIBLE”(可用库存),方法是从中减去每个库存商品的订购商品总数。这意味着,例如,我的产品编号为 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));
这可能是这里的逻辑绝对不稳定。但我迷失了这一点,如果有人能帮助我,我将不胜感激。
最佳答案
我认为您打算使用一个简单的相关子查询:
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
是不必要的。
关于MySQL。使用子查询修改表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575199/