免费提问

mysql怎样利用select查询批量更新多个字段?

144
提问者 huson
2020-09-17 09:50 悬赏 0财富值 阅读 461回答 1

是这样的,我想通过查询一个表来判断三个字段的值的大小,生成另外的字符,然后,把计算出来的结果插入到另外一张表,我的数据结构如下,需要更新的表名为rfm_2019_2020_value_score,查询的表名为rfm_2019_2020_score。

rfm_2019_2020_value_score这个表的结构如下:

 ID Membership_card_number R F M
 1 00203362 45
 2.2
 2
 00203361 22
 4.6


rfm_2019_2020_score表的结构如下:

 ID Membership_card_number R F M
 1 0020336211
 0
 2
 00203361 00
 0

通过判断第一个表的RFM值,如果大于等于3,得到的结果是1,否则结果为0,我想写一个数据库语句,不知道行不行啊?

mysql
登录 后发表回答
万事如意117
1楼 · 2020-09-18 08:05.采纳回答

你好,你这个其实就是计算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;

按我这样的写法,执行的效率是最高的,请采纳,谢谢。



网站简介 | 竞价技巧 | 网站建设 | 原创作品 | 联系我们 |

鄂ICP备17013851号-4|经营许可证:鄂B2-20160818 |互联网药品信息服务资格证: 粤20130124|鄂公网安备:42010601000001|版权登记号:2016SR017186