[英]Copy data from one table to another but adding 2nd WHERE clause won't insert data
[英]how to insert data from one table to another table and in 2nd table matches the field
我有兩個表購買和項目
Purchases(purchaseID purchaseDate, itemName,itemCost,itemQty)
Item(itemID,itemName,itemCost,itemQty).... itemID is auto Increment
現在,當我在購買表中插入數據時,我希望它以芳香方式插入到項目表中。
例如,對於采購值(pur001,2014-04-09,caltex,2000,5)
,物料表將為(1,caltex,2000,5)
當我在購買表值(pur002,2014-04-09,caltex,4000,10)
插入第二條記錄時,項目表應如下所示(1,caltex,6000,15)
我怎樣才能做到這一點?
如果我做對了,您想在數據庫中創建某種統計概覽或“已解決項目計數器”。 這是正確的嗎? 因此,用例是:售出每件商品時,“購買”表中的條目都會更新。
從關系數據庫設計的角度來看,這沒有意義。 創建一個查詢來選擇所有購買項目(按項目ID分組)並對每個購買項目的總計數進行匯總會更容易。 在這種情況下,數據庫中沒有任何“狀態”或計算值。 通常,在數據庫中不需要這樣的值。
盡管如此。 如果仍然想要/需要此功能,則可以使用在INSERT和UPDATE( https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html )上觸發的SQL觸發器。 這些觸發器獲取插入或更新的值。但是使用UPDATE時,戲劇開始了。 如果減少了售出物品的數量,您的策略是什么? 如果取消訂單會怎樣? 您看,也許最好不要在數據庫中保存此類數據:)
芳香地? 插入時會散發出令人愉悅的氣味嗎?
實現此目的的一種方法是創建一個TRIGGER,當在購買表上執行插入操作時將其觸發。
但是,您還需要考慮購買表的更新和刪除。 如果從采購表中刪除一行怎么辦。 如果更改了itemQty
或更改了itemName
,該怎么itemQty
。 保持item.itemQty
列“同步”可能需要的不僅僅是活動,而不僅僅是插入。
在開始使用CREATE TRIGGER語法之前,您需要仔細考慮預期的目標。
如果目標是總共購買特定物品:
SELECT p.itemName
, SUM(p.itemQty) AS total_qty
FROM purchases p
WHERE p.itemName = 'caltex'
GROUP BY p.itemName
適當的索引
... ON purchases (itemName,itemQty)
將制定一個非常有效的查詢計划。
在"item"
表中添加"itemQty"
列可有效地“打破” Codd的3NF規則(“每個屬性均取決於鍵,整個鍵,而僅取決於鍵。” "itemQty"
屬性(列)中的"item"
實體(表)是不是只依賴於實體(的關鍵"item"
),......它依賴的存在和其他實體的屬性(列在"purchases"
表)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.