[英]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
”列正在根據表Products
的idProduct
獲取價格。
此功能已起作用。 僅與數量相乘不起作用。
選項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 table將OrderValue
列更改為生成的列,如下所示:
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.