簡體   English   中英

如何使用聯接基於另一個表在mysql中更新多個值

[英]How to update multiple values in mysql based on another table using join

我有兩個表產品和過濾器。 我的產品表如下:-

id    name    color_id    size_id    composition_id
 1    Test      Black     60x60 CM       Cotton
 2    Test2     Red       60X90 CM      Acryllic

我的過濾器表如下:-

id    filter_name
 1      Black
 2      Red
 22     60x60 CM 
 23     60X90 CM
 61     Cotton
 62     Acryllic

我的預期輸出如下:

id    name    color_id    size_id    composition_id
 1    Test       1            22           61
 2    Test2      2            23           62

我已經嘗試了下面的查詢僅適用於color_id。 查詢如下:

UPDATE products
INNER JOIN filters ON products.color_id = filters.filter_name
SET products.color_id = filters.id

我想在一個更新語句中更新所有的'color_id,size_id,composition_id'。 可能是我們需要使用案例陳述。 有人可以幫忙嗎?

做到這一點的一種方法是使用一組相關的子查詢,每個需要查詢的列對應一個。 我們使用COALESCE以便如果找不到該值,則保留先前的值:

UPDATE products p
  SET color_id = COALESCE((SELECT id FROM filters WHERE filter_name = p.color_id), color_id),
      size_id = COALESCE((SELECT id FROM filters WHERE filter_name = p.size_id), size_id),
      composition_id = COALESCE((SELECT id FROM filters WHERE filter_name = p.composition_id), composition_id)

然后,您可以SELECT * FROM products

id  name    color_id    size_id composition_id
1   Test    1           22      61
2   Test2   2           23      62

dbfiddle上的演示

您還可以使用UPDATE ... JOIN查詢獲得相同的結果,這可能會更有效:

UPDATE products p
LEFT JOIN filters f1 ON f1.filter_name = p.color_id
LEFT JOIN filters f2 ON f2.filter_name = p.size_id
LEFT JOIN filters f3 ON f3.filter_name = p.composition_id
SET color_id = COALESCE(f1.id, color_id),
    size_id = COALESCE(f2.id, size_id),
    composition_id = COALESCE(f3.id, composition_id)

dbfiddle上的演示

暫無
暫無

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

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