MySQL的存储过程方程式新手一步一步?

时间:2018-08-09 07:28:36

标签: mysql sql database stored-procedures

你好,我是MySQL的新手,在这种情况下需要逐步的帮助

我的数据库名称为p_data 其中的表具有index unique值的关系

第一个表的名称为f_table

 -----------------
 |    f_table    |
 -----------------
 |      AV2      |
 |               |
 -----------------

第二张表是s_table

 -----------------
 |    s_table    |
 -----------------
 |      AV3      |
 |               |
 ----------------

我希望使每个数据条目的每个AV3值都等于该公式,例如Excel

 AV3 =

 =IF(AND(AV2>=1, AV2<40), 0, IF(AND(AV2>=40, AV2<=49), 18, 
  IF(AND(AV2>=50, AV2<=59), 36, IF(AND(AV2>=60, AV2<=69), 55, 
  IF(AND(AV2>=70, AV2<=79), 73,IF(AND(AV2>=80),91,"")))))) 

示例

 if AV2 >= 1 or < 40 
 So AV3 = 0

 if AV2 >= 40 or =< 49 
 So AV3 = 18

 and So on ...

如何运行MySQL处理每个数据条目,并根据第一个方程示例运行值,并自动将每个数据条目从第一张表添加到第二张表?

2 个答案:

答案 0 :(得分:1)

假设p_tables_table都具有字段id,该字段的对应条目具有相同的值,则可以执行以下操作:

UPDATE s_table s
JOIN p_table p ON s.id=p.id
SET s.AV3 = CASE 
    WHEN p.AV2 BETWEEN 1 AND  39 THEN 0
    WHEN p.AV2 BETWEEN 40 AND  49 THEN 18
    WHEN p.AV2 BETWEEN 50 AND  59 THEN 36
    WHEN p.AV2 BETWEEN 60 AND  69 THEN 55
    WHEN p.AV2 BETWEEN 70 AND  79 THEN 73
    WHEN p.AV2 >= 80 THEN 91
    ELSE NULL
    END

编辑正如@GordonLinoff所指出的那样,使ELSE子句返回NULL而不是''可能更好,以与整数数据类型保持一致

答案 1 :(得分:1)

这是对Nick答案的调整:

UPDATE s_table s JOIN
       p_table p
       ON s.id = p.id
    SET s.AV3 = (CASE WHEN p.AV2 < 40 AND p.AV2 >= 0 THEN 0
                      WHEN p.AV2 < 50 THEN 18
                      WHEN p.AV2 < 60 THEN 36
                      WHEN p.AV2 < 70 THEN 55
                      WHEN p.AV2 < 80 THEN 73
                      WHEN p.AV2 >= 80 THEN 91
                      ELSE NULL
                 END);

更改为:

  • 简化CASE表达式,并确认这些值是按顺序实现的。
  • 修复ELSE子句以使用NULL,以使类型一致。