SQL: обновить столбец таблицы с данными в столбце, извлеченными из представления в той же процедуре - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь сделать выбор и обновление в рамках одной локальной процедуры. Идея состоит в том, чтобы получить количество заказанных продуктов из указанного заказа c в представлении (Produktantal), а затем обновить номера запаса (antal) из таблицы «produktlager», используя данные, полученные из представления.

Я получаю следующее сообщение об ошибке Error: ER_BAD_FIELD_ERROR: Unknown column 'Produktantal' in 'field list'. Я, кажется, не доступен для доступа к колонке в части обновления. Как я могу это сделать?

DROP PROCEDURE IF EXISTS update_stock_status;
DELIMITER ;;
CREATE PROCEDURE update_stock_status(
    p_orderid INT
)
BEGIN
    SELECT 
    Produktid,
    Orderid,
    Produktantal,
    Lagerantal,
    Hylla
    FROM v_products2order_w_products2lager
    WHERE Orderid = p_orderid;

    UPDATE produkt2lager
    SET
        antal = antal - Produktantal
    WHERE
        produktid = Produktid
    AND
        hylla = Hylla;
END
;;
DELIMITER ;

Вид:


    DROP VIEW IF EXISTS v_products2order_w_products2lager;

    CREATE VIEW v_products2order_w_products2lager AS
    SELECT
        p2o.produktid AS "Produktid",
        p2o.orderid AS "Orderid",
        p2o.antal AS "Produktantal",
        p2l.antal AS "Lagerantal",
        p2l.hylla AS "Hylla"
    FROM
        produkt2order AS p2o
        LEFT OUTER JOIN produkt2lager AS p2l ON p2o.produktid = p2l.produktid;

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Два оператора в вашей процедуре выполняются независимо, и второй оператор никак не может получить доступ к результатам первого.

Я подозреваю, что вам нужен синтаксис update ... join:

UPDATE produkt2lager p
INNER JOIN v_products2order_w_products2lager o 
    ON o.produktid = p.produktid
    AND o.hylla = p.hylla
SET p.antal = p.antal - o.produktantal
WHERE o.oderid = p_order_id
1 голос
/ 22 марта 2020

Я думаю, вы хотите UPDATE с JOIN:

UPDATE produkt2lager l
       v_products2order_w_products2lager v
       ON l.produktid = v.produktid and
          l.hylla = v.hylla
    SET l.antal = l.antal - v.Produktantal;
...