MySQL。使用子查询修改表

标签 mysql sql subquery

我对此感到困惑,需要一些帮助。

我有这些表:

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/

相关文章:

mysql - 子查询(以及带有连接的查询)不使用 MySQL 索引 (MyISAM)

mysql - Golang Gorm : Same query constructed differently throwing different results

mysql - 无法在 macOS Sierra 上安装 mysql2 gem

javascript - Passport.js 使用 MySQL 和 Node.js 成功登录挂起,没有错误

sql - MYSQL优化&问题

mysql - 我怎样才能使这个 SQL 触发器在没有 'returning' 结果的情况下工作?

mysql从每组中获取最后10条记录

mysql - 不正确的分组依据和合并排序

mysql - 有限制的子查询

sql-server-2008 - T-SQL 查看子查询Where 子句