用case mysql

时间:2016-05-13 09:27:00

标签: php mysql join

我使用的是Mysql,而且我很难尝试从更新查询中获取结果。我有两张桌子。第一个表loaddata_temp和第二个表部分company_category

第一个表loaddata_temp

|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_category

|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                  |

2 个答案:

答案 0 :(得分: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表中未找到任何行,则更新为'错误'。

答案 1 :(得分:0)

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'。