簡體   English   中英

復雜的SQL更新語句

[英]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未在您的更新中使用,但將有助於區分您的項目。

編輯

為了全面概括您的代碼,以下是我向您建議的內容: 在此處輸入圖片說明

保持你的桌子上的shirttrouser ,但要使用中間item 現在,無論您擁有多少項目類型(我在上面寫的都是相同的項目),您都將只需要執行一個UPDATE請求。

注意: item.type列是可選的,您可以使用它來快速了解商品的類型,而無需查詢所有子表( trousershirt ...)

暫無
暫無

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

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