[英]Complex SQL Update Statement
我有兩個MYSQL表“ shirts_in_box”,“ trousers_in_box”,它們表示可以放在同一框內的兩種不同類別的對象:襯衫和褲子,以及每個框的數量。
表“ shirts_in_box”具有列“ shirt_id,數量”,而“ trousers_in_box”具有列“ trouser_id,數量”
我必須處理以下情況:
1)我從box_id =“ foo”中的兩個項目開始:例如,表“ shirts_to_box”有一行
shirt_id = 'xxx', quantity : '1'
並且“ trousers_to_box”有一行
trouser_id = 'www', quantity : '2'
2)提交box_id ='foo'的項目更新列表,如下所示:
trousers_to_box :
box_id : foo, trousers_id : 'aaa', quantity : '5'
shirts_to_box :
box_id : foo, shirts_id : 'xxx', quantity : '2'
3)我應該這樣做並更新“ shirts_to_box”,“ trousers_to_box”,以便上述內容是具有box_id ='foo'的兩個表中的所有條目,即
shirts_to_box :
UPDATE shirt_id = 'xxx', quantity : '1' to quantity = 2
trousers_to_box :
ADD trouser_id = 'aaa', quantity : '5'
DELETE trouser_id = 'www', quantity : '2'
目前,我的方法還不是很有效。 我在兩個單獨的表上進行兩個單獨的查詢,並分別對每個表進行添加/更新/刪除。
有沒有辦法在一個查詢中完成所有這些操作? 還是比我目前擁有的方法更有效的方法?
您可以使用通用表item_in_box
, 為所有項目使用不同的ID (對於褲子和襯衫,您沒有相同的ID):
-----------------------------------------------
BOX_ID | ITEM_ID | ITEM_TYPE | QUANTITY
-----------------------------------------------
foo | xxx | shirt | 1
foo | www | trouser | 2
-----------------------------------------------
然后,當您對foo
框進行了更新時,只需使用這種請求即可:
UPDATE item_to_box
SET `quantity` = CASE `item_id`
WHEN xxx THEN 5
WHEN yyy THEN 2
END
新列item_type
未在您的更新中使用,但將有助於區分您的項目。
編輯
為了全面概括您的代碼,以下是我向您建議的內容:
保持你的桌子上的shirt
和trouser
,但要使用中間item
。 現在,無論您擁有多少項目類型(我在上面寫的都是相同的項目),您都將只需要執行一個UPDATE請求。
注意: item.type
列是可選的,您可以使用它來快速了解商品的類型,而無需查詢所有子表( trouser
, shirt
...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.