您好,我是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来处理每个数据条目,并根据第一个方程示例运行值,并随每个数据条目自动将其从第一个表添加到第二个表?
这是对尼克答案的调整:
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
,因此类型一致。
假设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
而不是''
与整数数据类型保持一致。