首页 > 解决方案 > 在mysql中插入X(从Z中选择Y)是否有更快的替代方法?

问题描述

table_a

user_id  score  
1        10     
2        10      
3        10      
5        43      
6        43      
9        20      
10       42    



table_b

user_id  flag
1        0
2        0
3        0
4        1
5        1
6        0 
7        1

在上述情况下,如果from有 ( ) ,我该如何填充table_b.flagto ?1user_idtable_ascore > 40

标签: mysql

解决方案


您可以使用多表UPDATE来获得您想要的结果:

UPDATE table_b b
JOIN table_a a ON a.user_id = b.user_id AND a.score > 40
SET b.flag = 1

JOIN条件意味着只有table_b对应user_idintable_a具有 a 的行score > 40才会将其标志设置为1。如果您还想将标志设置为0if 对应的score <= 40,您可以使用条件作为值 to SET(因为 MySQL 将布尔值视为10在数字上下文中):

UPDATE table_b b
JOIN table_a a ON a.user_id = b.user_id
SET b.flag = a.score > 40

对于您的示例数据,结果table_b相同:

user_id     flag
1           0
2           0
3           0
4           1
5           1
6           1
7           1

dbfiddle 上的演示


推荐阅读