2016-09-19 1 views
1

Я смущаюсь по этому вопросу и нуждаюсь в некоторой помощи.MySQL. Изменения таблицы с подзапросами

I've получили эти таблицы:

1) Продукты (продукты)

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

Теперь, что Я должен сделать это, чтобы обновить столбец «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

Вы можете использовать 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 

Demo here