你好,我是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处理每个数据条目,并根据第一个方程示例运行值,并自动将每个数据条目从第一张表添加到第二张表?
答案 0 :(得分:1)
假设p_table
和s_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
,以使类型一致。