如何在mysql中已经存在的列的基础上自动将值插入到新列中

gab6jxml  于 2021-06-19  发布在  Mysql
关注(0)|答案(3)|浏览(324)

我有一个 employee 存储一些数据的表,包括 salary . 我又加了一个专栏 grade .

If salary is between 0-2000 grade is 1.
If between 2000-3000 grade is 2.
If more than 3000 than 3.

我需要手动完成吗 UPDATE 或者有没有可能用 ALTER .

oogrdqng

oogrdqng1#

为什么要将等级存储在表中?你总是可以从薪水中提取等级。在select中,可以使用case语句。

dba5bblo

dba5bblo2#

在您的例子中,最好的选择是使用create table和generated columns,如注解中提到的@madhur
另一种选择是使用下面的更新查询,但要考虑到任何薪资值的更新都可能会刹住两者之间的关系 salary 以及 grade 柱。

UPDATE `employee ` SET `grade` = CASE
    WHEN salary >= 0 AND salary <=2000 THEN 1
    WHEN salary > 2000 AND salary <=3000 THEN 2
    WHEN salary > 3000 THEN 3
    ELSE `0`
    END
0md85ypi

0md85ypi3#

可以通过更新来实现这一点。但是,您可能会发现使用生成的列更好:

alter table employee add grade int generated as
    (case when salary < 2000 then 1 when salary < 3000 then 2 else 3 end);

这很方便,因为如果分数发生变化或添加新行时,您不必更新等级。 GRADE 在使用时计算。

相关问题