mysql - 在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.flag
to ?1
user_id
table_a
score > 40
解决方案
您可以使用多表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_id
intable_a
具有 a 的行score > 40
才会将其标志设置为1
。如果您还想将标志设置为0
if 对应的score <= 40
,您可以使用条件作为值 to SET
(因为 MySQL 将布尔值视为1
或0
在数字上下文中):
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
推荐阅读
- reactjs - 获取-警告:列表中的每个孩子都应该有一个唯一的“关键”道具。在我的 React Native 应用程序中
- postgresql - 在 Postgres 中添加多行与冲突
- python - 支持 Python 的蓝牙扫描仪 (Windows 10)
- linux - 为什么 Marklogic 数据集线器在重启后不重启
- android - FFMPEG 在 Android 中没有像预期的那样“切割”
- javascript - 既然 Twitter 需要 JavaScript,我该如何抓取它们?
- embedded - STM32 SPI驱动接收数据始终为0
- c# - 如何获取在 Visual Studio 的“附加到进程”框中管理的 iexplore.exe 进程类型?
- python-3.x - 标记为 TP、TN、FP、FN 的值的混淆矩阵
- c# - FindByEmailAsync 中仍包含未映射的列