mysql怎样利用select查询批量更新多个字段?
是这样的,我想通过查询一个表来判断三个字段的值的大小,生成另外的字符,然后,把计算出来的结果插入到另外一张表,我的数据结构如下,需要更新的表名为rfm_2019_2020_value_score,查询的表名为rfm_2019_2020_score。
rfm_2019_2020_value_score这个表的结构如下:
ID | Membership_card_number | R | F | M |
1 | 00203362 | 4 | 5 | 2.2 |
2 | 00203361 | 2 | 2 | 4.6 |
rfm_2019_2020_score表的结构如下:
ID | Membership_card_number | R | F | M |
1 | 00203362 | 1 | 1 | 0 |
2 | 00203361 | 0 | 0 | 0 |
通过判断第一个表的RFM值,如果大于等于3,得到的结果是1,否则结果为0,我想写一个数据库语句,不知道行不行啊?
你好,你这个其实就是计算RFM分值,数据库语句略微复杂,其实就是数据库更新+查询+计算,正常的写法一般都是这样的:
update 表名 set 字段1=值,字段2=值,字段3=值
错误的写法如下:
update 表名 set(字段1,字段2,字段3,...) = (select 数值1,数值2,数值3,...) where 条件
在不不使用select情况下一般这样写:
UPDATE 字段1,字段2,字段3 SET A.字段1 = B.字段1, A.字段2 = B.字段2, A.字段3 = B.字段3 where A.nid=234 and B.id=123;
如果需要使用select查询,一般这样写:
UPDATE 表名 别名1, (select 字段1,字段2,字段3 from 表名 where id = 123) 别名2 SET 别名1.字段1 = 别名1.字段1, 别名1.字段2 = 别名2.字段2 where 别名2.nid=234;
因为你的要求设计了查询和计算,而且还是多个例子,我按照你的要求写了个例子:
update rfm_2019_2020_value_score rr,( SELECT Membership_card_number, CASE WHEN R >=3 THEN '1' ELSE '0' END AS R, CASE WHEN F >=3 THEN '1' ELSE '0' END AS F, CASE WHEN M >=3 THEN '1' ELSE '0' END AS M FROM rfm_2019_2020_score) n set rr.R=n.R ,rr.F=n.F ,rr.M=n.M where rr.Membership_card_number= n.Membership_card_number;
按我这样的写法,执行的效率是最高的,请采纳,谢谢。