MySQL中将A表中的字段值赋值给B表中的字段
在工作中设计到一些字段值的初始化,特别是生产系统中添加字段时处理历史数据的初始化,往往需要更新字段值,这里说说将A表中的字段值赋值给B表中的字段的几种更新方法。
1、通过子查询实现
UPDATE tableA a SET a.column1 = ( SELECT b.column1 FROM tableB b WHERE a.id = b.aid ), a.column2 = ( SELECT b.column2 FROM tableB b WHERE a.id = b.aid ) WHERE EXISTS ( SELECT 1 FROM BtableB c WHERE a.id = c.aid );
2、通过逗号操作符的内连接
UPDATE tableA a, tableB b SET a.column1 = b.column1, a.column2 = b.column2 WHERE a.id = b.aid;
3、各种内、外连接都可以实现
UPDATE tableA a LEFT JOIN tableB b ON a.id = b.aid SET a.column1 = b.column1, a.column2 = b.column2;
4、SQL允许的各种连接,并根据CASE函数控制不同类型数据更新不同的值
UPDATE system_alarm s LEFT JOIN ( SELECT a.id aid, ( CASE a.alarm_type WHEN '1' THEN d.p1_min WHEN '2' THEN d.p1_max WHEN '5' THEN d.p2_min WHEN '6' THEN d.p2_max ELSE 0 END ) AS num FROM system_alarm a LEFT JOIN device d ON a.device_id=d.device_id ) aaa ON s.id=aaa.aid SET s.threshold=aaa.num;
这里没有用伪SQL,因为结合实际业务更好理解,大概说一下这条SQL的实际业务逻辑:设备的报警表中添加了新的字段:threshold(阈值),用来保存报警时的阈值,需要根据不同的报警类型把历史报警的对应阈值放入新字段中,这里统一把当前的设备阈值保存到新字段,因修改过阈值而产生的不合理数据另外进行针对性的处理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具