sql - 是否可以根据另一列中的值设置列值?

时间:2017-07-25 15:40:11

标签: mysql sql mysqli phpmyadmin

假设我正在创建一个'学生'数据库,并且其中有一个名为'考试'的表格。现在我有以下两列 - “标记”和“等级”,我希望“等级”列根据“标记”中输入的值自动接收值。说'A'代表'标记'> = 90,'B'代表'标记'> = 80等等。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

不是很容易。在MySQL中,您可以进行更新:

update students
    set grade = (case when marks >= 90 then 'A'
                      when marks >= 80 then 'B' 
                      . . .
                 end);

但是,对于下一个insertupdate声明,这将过时。

在MySQL 5.7.6中,您可以自动生成列:

alter table students
    add grade char(1) as (case when marks >= 90 then 'A'
                               when marks >= 80 then 'B' 
                               . . .
                          end);

这很方便,因为该列是在查询时计算的,因此它是自动更新的。

在早期版本中,您可以使用视图执行类似操作:

create view v_students as
    select s.*,
           (case when marks >= 90 then 'A'
                 when marks >= 80 then 'B' 
                 . . .
            end) as grade
    from students;

这几乎与生成的列一样好,但它要求每个人都查询视图。

最后,您可以实际存储该值,使用触发器在marks更改时进行维护。