2016-09-19 10 views
1

これを混乱させて助けが必要です。MySQL。サブクエリを使用したテーブルの変更

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 | 
+-------------+-----------------------------+---------------+------------------+ 

と::

I'veは、これらのテーブルだ、今

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)); 

ここでは論理が絶対にうねっている可能性があります。しかし、私はこの人に迷ってしまい、誰かが私を助けてくれたら大変感謝しています。

答えて

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は不要です。

+0

!これほどまでにありがとう、私はそれを過度に複製していることを知っていました。 – CNB

0

あなたは、テーブルPEDIDOSの集約バージョンにJOINUPDATEを使用することができます:はい

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 

Demo here

関連する問題