根据mysql中另一个表中的值更新一个表中的列

时间:2016-07-09 06:23:22

标签: mysql sql-update case

我有一个名为' quot_items'的表,其中包含一个grand_total字段。它有这种结构

tender_id |  grand_total
15001          100000
15002          250000
15003          1500000
16009          4500000

我还有另一张名为'引用'它拥有一个'类别'领域。它有这种结构。

tender_id |  category
15001          H
15002          E
15003          B
16009          A

iam尝试的是我在MYSQL中需要一个UPDATE语句,其中存在某些条件:

如果[grand_total']< ' 100000')然后是类别H(这意味着如果表' quot_items'的grand_total值是< 100000则更新表'引用'类别字段为' H'

如果([' grand_total']> =' 100000')&& ([' grand_total']< =' 200000')然后分类' G'。

如果([' grand_total']>' 200000')&& ([' grand_total']< =' 600000')然后分类' F'。

如果([' grand_total']>' 600000')&& ([' grand_total']< =' 1000000')然后分类' E'。

如果([' grand_total']>' 1000000')&& ([' grand_total']< =' 1500000')然后分类' D'。

还有更多条件。我需要一个查询来在MYSQL中执行此操作,以便我可以在一个更新语句中更新我的数据库。请任何人都可以帮助我。

我尝试了以下内容:

UPDATE quotation INNER JOIN quotation_items ON quotation.tender_id = quotation_items.tender_id
SET quotation.category = (
    CASE WHEN quotation_items.grand_total < 100000 then 'H' 
    WHEN quotation_items.grand_total >= 100000 && quotation_items.grand_total <= 200000 then 'G'
    WHEN quotation_items.grand_total > 200000 && quotation_items.grand_total <= 600000 then 'F'
    WHEN quotation_items.grand_total > 600000 && quotation_items.grand_total <= 1000000 then 'E'
    WHEN quotation_items.grand_total > 1000000 && quotation_items.grand_total <= 1500000 then 'D'
    END
);

2 个答案:

答案 0 :(得分:1)

使用CASE表达式。

<强>查询

SELECT tender_id,
CASE WHEN grand_total < 100000 then 'H' 
WHEN grand_total >= 100000 && grand_total <= 200000 then 'G'
WHEN grand_total > 200000 && grand_total <= 600000 then 'F'
WHEN grand_total > 600000 && grand_total <= 1000000 then 'E'
WHEN grand_total > 1000000 && grand_total <= 1500000 then 'D'
END AS Category
FROM quot_items;

如果您想更新category列。然后,

UPDATE quot_items
SET category = (
    CASE WHEN grand_total < 100000 then 'H' 
    WHEN grand_total >= 100000 && grand_total <= 200000 then 'G'
    WHEN grand_total > 200000 && grand_total <= 600000 then 'F'
    WHEN grand_total > 600000 && grand_total <= 1000000 then 'E'
    WHEN grand_total > 1000000 && grand_total <= 1500000 then 'D'
    END
);

答案 1 :(得分:1)

试试这个:

UPDATE quotation t1
INNER JOIN quot_items t2
ON t1.tender_id = t2.tender_id
SET t1.category = 
    CASE WHEN t2.grand_total < 100000 THEN 'H' 
    WHEN grand_total >= 100000 AND grand_total <= 200000 THEN 'G'
    WHEN grand_total > 200000 AND grand_total <= 600000 THEN 'F'
    WHEN grand_total > 600000 AND grand_total <= 1000000 THEN 'E'
    WHEN grand_total > 1000000 AND grand_total <= 1500000 THEN 'D'
    ELSE t1.category
    END