簡體   English   中英

插入帶有計算列的語句

[英]Insert statement with calculated column

我創建了以下簡單的DataModel

在此處輸入圖片說明

我使用以下insert statements插入值:

1)餐桌產品

INSERT INTO test.products
(ProductName, Price)
VALUES 
("Product A","99,99"),
("Product B","49,95"), 
("Product C","5,95");

2)表格順序

INSERT INTO test.orders
(Customer)
VALUES 
("Customer A"),
("Customer B"), 
("Customer B");

到目前為止,所有這些工作正常。


現在,在表Products_per_Order我想通過將Price乘以Quantity來計算最后一列OrderValue 因此,我嘗試使用以下兩個選項來引用此處的答案但仍無法使它們起作用:

注意:Price ”列正在根據表ProductsidProduct獲取價格。
此功能已起作用。 僅與數量相乘不起作用。

選項1:

INSERT INTO test.products_per_order
(Orders_idOrders, Products_idProducts, Price, Quantity, OrderValue)
VALUES
("1","1",(Select Price from test.products where test.products.idProducts = "1"),"5",(Price * Quantity)),
("1","2",(Select Price from test.products where test.products.idProducts = "2"),"4",(Price * Quantity)),
("2","1",(Select Price from test.products where test.products.idProducts = "1"),"10",(Price * Quantity)),
("3","2",(Select Price from test.products where test.products.idProducts = "2"),"3",(Price * Quantity)),
("3","3",(Select Price from test.products where test.products.idProducts = "3"),"9",(Price * Quantity));

選項2:

INSERT INTO test.products_per_order 
(Orders_idOrders, Products_idProducts, Price, Quantity, OrderValue)
    SELECT m.idOrder, m.idProduct, p.price, m.qty, p.price * m.qty
    FROM (SELECT 1 as idOrder, 1 as idProduct, 5 as qty UNION ALL
          SELECT 1 as idOrder, 2 as idProduct, 4 as qty UNION ALL
          SELECT 2 as idOrder, 1 as idProduct, 10 as qty UNION ALL
          SELECT 3 as idOrder, 2 as idProduct, 3 as qty UNION ALL
          SELECT 3 as idOrder, 3 as idProduct, 9 as qty
         ) m
    LEFT JOIN test.products p on p.idProducts = m.idProduct;

您有解決該問題的想法嗎?

您寫道OrderValue是一個計算列,為什么不讓數據庫為您計算它呢?

使用alter tableOrderValue列更改為生成的列,如下所示:

alter table test.products_per_order 
modify column OrderValue int generated always as (Price * Quantity) stored;

這樣,您根本不需要插入它-您的插入將變成這樣:

INSERT INTO test.products_per_order 
(Orders_idOrders, Products_idProducts, Price, Quantity)
    SELECT m.idOrder, m.idProduct, p.price, m.qty
    FROM (SELECT 1 as idOrder, 1 as idProduct, 5 as qty UNION ALL
          SELECT 1 as idOrder, 2 as idProduct, 4 as qty UNION ALL
          SELECT 2 as idOrder, 1 as idProduct, 10 as qty UNION ALL
          SELECT 3 as idOrder, 2 as idProduct, 3 as qty UNION ALL
          SELECT 3 as idOrder, 3 as idProduct, 9 as qty
         ) m
    LEFT JOIN test.products p on p.idProducts = m.idProduct;

參考以下問題的評論,問題是表Products中的prices需要使用來存儲. 作為小數分隔符代替,

如果將表“ Products的“ INSERT STATEMENT ”修改為:

INSERT INTO test.products
(ProductName, Price)
VALUES 
("Product A","99.99"),
("Product B","49.95"), 
("Product C","5.95");

然后運行選項2中的代碼,一切正常。

INSERT INTO test.products_per_order 
(Orders_idOrders, Products_idProducts, Price, Quantity, OrderValue)
    SELECT m.idOrder, m.idProduct, p.price, m.qty, p.price * m.qty
    FROM (SELECT 1 as idOrder, 1 as idProduct, 5 as qty UNION ALL
          SELECT 1 as idOrder, 2 as idProduct, 4 as qty UNION ALL
          SELECT 2 as idOrder, 1 as idProduct, 10 as qty UNION ALL
          SELECT 3 as idOrder, 2 as idProduct, 3 as qty UNION ALL
          SELECT 3 as idOrder, 3 as idProduct, 9 as qty
         ) m
    LEFT JOIN test.products p on p.idProducts = m.idProduct;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM