【数据库】Sql Server,A表的a字段更新到B表的a字段,基础知识点,一分钟拿下

🌹欢迎来到《小5讲堂》🌹

🌹这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。🌹

🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹

👨💻 作者简介

🏆 荣誉头衔:2024博客之星Top14 | CSDN博客专家 | 阿里云专家博主

🎤 经历 :曾多次进行线下演讲,亦是 CSDN内容合伙人 以及 新星优秀导师

💡 信念"帮助别人,成长自己!"

🚀 技术领域:深耕全栈,精通 .NET Core (C#)、Python、Java,熟悉主流数据库

🤝 欢迎交流:无论是基础概念还是进阶实战,都欢迎与我探讨!

目录

  • ✨前言
  • [标准写法(使用 JOIN)](#标准写法(使用 JOIN))
  • 具体示例
  • 其他常用场景
    • [1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值)](#1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值))
    • [2. 使用子查询](#2. 使用子查询)
    • [3. 更新为 A 表的聚合值](#3. 更新为 A 表的聚合值)
  • 注意事项
  • 实例
  • 文章推荐

✨前言

不知道大家有没有这样的感受,每隔一段时间,有些sql写法大概记得,但是真正手写的时候还是有点无从下手,哈哈哈。

我知道可以写sql语句批量更新某个表字段给两外一个表字段,少用就很快生疏了,但是我们对基本的概念和用法还是记得的,所以现在的AI工具很大程度帮我们记住这些写法,有好处也有坏处吧。

趁这次机会,又重新回顾下sql一些基础用法,Let's Go

在 SQL Server 中,将 A 表的 a 字段更新到 B 表的 a 字段,常见写法取决于两表之间的关联条件。

标准写法(使用 JOIN)

sql 复制代码
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.关联字段 = A.关联字段

具体示例

假设 A 表(源表)和 B 表(目标表)通过 id 字段关联:

sql 复制代码
-- 创建示例表
CREATE TABLE A (id INT, a VARCHAR(50));
CREATE TABLE B (id INT, a VARCHAR(50));

-- 插入数据
INSERT INTO A VALUES (1, 'value1'), (2, 'value2');
INSERT INTO B VALUES (1, 'old1'), (2, 'old2'), (3, 'old3');

-- 更新 B.a = A.a
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.id = A.id;

其他常用场景

1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值)

sql 复制代码
UPDATE B
SET B.a = A.a
FROM B
LEFT JOIN A ON B.id = A.id;

2. 使用子查询

sql 复制代码
UPDATE B
SET B.a = (SELECT A.a FROM A WHERE A.id = B.id)
WHERE EXISTS (SELECT 1 FROM A WHERE A.id = B.id);

3. 更新为 A 表的聚合值

sql 复制代码
UPDATE B
SET B.a = A.sum_value
FROM B
INNER JOIN (
    SELECT id, SUM(a) AS sum_value
    FROM A
    GROUP BY id
) A ON B.id = A.id;

注意事项

  1. 确保有 WHERE 条件或正确的 JOIN:避免全表更新
  2. 先备份或测试 :使用 BEGIN TRANSACTIONROLLBACK 验证
  3. 注意数据类型:A.a 和 B.a 的数据类型必须兼容
  4. 考虑 NULL 值:如果 A.a 为 NULL,B.a 也会被更新为 NULL
sql 复制代码
-- 安全测试示例
BEGIN TRANSACTION
    UPDATE B
    SET B.a = A.a
    FROM B
    INNER JOIN A ON B.id = A.id;
    
    -- 检查结果
    SELECT * FROM B;
    
    -- 确认无误后提交,否则回滚
    -- COMMIT
    -- ROLLBACK

实例

在update更新前,可以使用select进行查询看下是否正确,毕竟在生产环境一键覆盖了,

如果更新的字段多,且有覆盖的情况,最好做一次数据库表备份。

文章推荐

【数据库】Sql Server,A表的a字段更新到B表的a字段,基础知识点,一分钟拿下

【数据库】Sql Server数据库中isnull、iif、case when三种方式的使用和空值判断

【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句

【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路

【数据库】SQL Server 查询条件小技巧:ISNULL 函数的使用,有请DeepSeek来辅助讲解下

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

相关推荐
逍遥德2 小时前
PostgreSQL --- 自增主键【序列】的避坑指南
数据库·后端·sql·mysql·postgresql·sqlserver
墨燚4 天前
SQL Server学习之旅
sqlserver
tongyiixiaohuang5 天前
跨平台数据库集成:SQLServer到MySQL的最佳实践
数据库·mysql·sqlserver
修电脑的猫7 天前
SAP<->SQL server链接
sqlserver·sap·abap
满昕欢喜7 天前
SQL Server 2019的常用工具
数据库·sqlserver
woshilys8 天前
sql server 查询外键
数据库·sql·sqlserver
鱼听禅10 天前
CentOS搭建SVN服务器
数据库·postgresql·sqlserver
满昕欢喜15 天前
SQL Server的概述与安装
数据库·sqlserver
xuefuhe15 天前
SQL Server: WITH(NOLOCK)=READUNCOMMITTED
sqlserver