使用case mysql更新join


update join with case mysql

我正在使用Mysql,尝试从更新查询中获得结果时遇到了困难。我有两张桌子。第一个表加载data_temp和第二个表部分company_category

第一个表加载数据_ amp

|id_external|company_name               |company_category_id|
-------------------------------------------------------------
|          1|iqballord                  |UD                 |
|          2|A Plus Lawn Care           |PT                 |
|          3|A. L. Price                |PMA                |
|          4|A.J. August Fashion Wear   |BUMN               |
|          5|A+ Electronics             |WARUNG             | 
|          6|A+ Investments             |PT                 | 

第二表Company_类别

|company_category_id|company_category_description|
--------------------|-----------------------------
|                  3|PT                          |
|                  5|UD                          |
|                  6|PMA                         |
|                  7|BUMN                        |
|                 23|Koperasi                    |

我使用此查询作为获取结果

UPDATE loaddata_temp,company_category
       SET loaddata_temp.company_category_id= 
        CASE 
            WHEN loaddata_temp.company_category_id = company_category.company_category_description 
            THEN company_category.company_category_id
            ELSE 'error' END

我从上面查询中得到了什么

|id_external|company_name               |company_category_id|
-------------------------------------------------------------
|          1|iqballord                  |5                  |
|          2|A Plus Lawn Care           |3                  |
|          3|A. L. Price                |6                  |
|          4|A.J. August Fashion Wear   |7                  |
|          5|A+ Electronics             |error              | 
|          6|A+ Investments             |3                  | 

但是我得到的

|id_external|company_name               |company_category_id|
-------------------------------------------------------------
|          1|iqballord                  |error              |
|          2|A Plus Lawn Care           |error              |
|          3|A. L. Price                |error              |
|          4|A.J. August Fashion Wear   |error              |
|          5|A+ Electronics             |error              | 
|          6|A+ Investments             |3                  |

我将使用以下查询:

UPDATE      loaddata_temp lt
LEFT JOIN   company_category cc
        ON  cc.company_category_description = lt.company_category_id
    SET     lt.company_category_id = COALESCE(cc.company_category_id, 'error');

使用LEFT JOIN查找要更新的匹配行。如果在company_category表中找不到行,则更新为"error"。

UPDATE loaddata_temp l LEFT JOIN company_category c ON c.company_category_description = l.company_category_id
       SET loaddata_temp.company_category_id= If(c.company_category_id IS NULL, 'error' ,c.company_category_id)

您还可以在查询中使用IF语句,如果找到company_category_id,则它将更新相同的语句,否则返回"error"。