SQL把一个表中数据更新到另一个表的多种方法

在此仅记下SQL从一个表中把数据简单地更新到另一个表的多种方法, 由于水平有限,如有不妥之处请高手指正:)

SQL 从A表取数据更新到B表 的多种方法:

假设有二个表, 分别为:T1, T2

先创建二个表,创建T1 如下代码:

CREATE TABLE T1
(
    A NVARCHAR(10),
    B NVARCHAR(10),
    DC NVARCHAR(100),
    AId int identity(10000,1) primary key
)

CREATE TABLE T2
(
    A1 NVARCHAR(10),
    B1 NVARCHAR(10),
    DC1 NVARCHAR(100),
    aId1 int identity(100,1) primary key
)

 插入测试数据:

向T1表中插入测试数据:
INSERT INTO T1 select 'A1','B01','一年后'
INSERT INTO T1 select 'AA1','B001','二年后'

再向T2表中插入测试数据:

INSERT INTO T2 select 'A1','B01','一月后'
INSERT INTO T2 select 'AA1','BB001','二月后'

现在我们需要把T1表中的DC字段更新为T2表中DC1的值,条件为T1中的A字段的值等于T2表中的A1字段的值且T1表中的B字段的值等于T2表中B2字段的值(这样写主要是因为表和表之间的关联关系可能有多个字段,此处只选二个字段,多个依此类推)。

方法一:可以根据查出的值一条一条更新去执行SQL更新.或手动更新也可以,此处不讨论这种方法,略过.

方法二:可以通过一条SQL语句一次更新多条数据.SQL语句写法略有不同,如下:

A): 方法

Update T1
set dc=(select dc1 from t2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.AID in (
    SELECT AID FROM T1
    INNER JOIN T2 ON t1.A=T2.A1 AND T1.B=T2.B1
)
注:在我标我红色的in地方如果把'in'换成'='将出错,但在下面的B种写法里就可以换成'=',变成C方法写法.

B): 方法

Update T1
set dc=(select dc1 from t2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.AID in (
    SELECT T1.AID FROM T2
    WHERE t1.A=T2.A1 AND T1.B=T2.B1
)

C): 方法

Update T1
set dc=(select dc1 from t2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.AID = (
    SELECT T1.AID FROM T2
    WHERE t1.A=T2.A1 AND T1.B=T2.B1
)

 D): 方法

Update T1
set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.A = (
    SELECT T1.A FROM T2
    WHERE T1.A=T2.A1 AND T1.B=T2.B1
)

E):方法

Update T1
set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.A = (
    SELECT T2.A1 FROM T2
    WHERE T1.A=T2.A1 AND T1.B=T2.B1
)

F): 方法 

Update T1
set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.A in (
    SELECT T2.A1 FROM T2
    WHERE T1.A=T2.A1 AND T1.B=T2.B1
)

注:如果在F)方法改写成如下的写法将会出错。

Update T1
set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1)
WHERE T1.A in (
    SELECT T1.A FROM T1
    INNER JOIN T2 ON t1.A=T2.A1 AND T1.B=T2.B1
)

此种方法将会更新掉所有符合T1.A in ()这个条件的数据,所以是不正确的, 所以不能这样写。

G):方法

Update T1
set dc=(select dc1 from T2 where T1.A=T2.A1 AND T1.B=T2.B1 AND T1.DC=T2.DC1)
FROM T1, T2
WHERE  T1.A=T2.A1 AND T1.B=T2.B1

H):方法

Update T1
set T1.dc=T2.dc1
FROM T1
INNER JOIN T2 ON T1.A=T2.A1 AND T1.B=T2.B1
WHERE t1.A=T2.A1 AND T1.B=T2.B1

  注:此处我用灰色标记的部分可以去掉。

I): 方法

Update T1
set T1.dc=T2.dc1
FROM T1, T2
WHERE  T1.A=T2.A1 AND T1.B=T2.B1

请特别注意以上方法中我用红色标记上的代码写法。

总节:虽然是一条简单的更新语名但也有多种写法,且每种写法各有优缺点。

大家是否还有更简单的写法或者更容易理解的写法?如果有请提出来一起讨论,谢谢!

说明测试环境:以上代码在MSSQL2005中验证是可行的.

SQL把一个表中数据更新到另一个表的多种方法相关推荐

  1. mysql 不在另一个表中_MySQL选择查询从表中选择不在另一个表中的行?

    对于我们的示例,我们将创建两个表并应用"自然左联接"以从第二个表中不存在的表中获取行. 创建第一个表.mysql> create table FirstTableDemo - ...

  2. office2007 打开Excel 提示 工作表中的公式包含一个或多个无效引用的解决方法

    打开带有数据或者图表的工作表或工作簿中,有时候会弹出一个对话框"工作表中的公式包含一个或多个无效引用,请验证公式包含的路径.工作簿.区域名称或单元格引用",单击确定后就不再显示,但 ...

  3. oracle复制另一个字段,【学习笔记】Oracle存储过程 表中列不同时动态复制表中数据到另一个表中...

    天萃荷净 分享一篇关于Oracle存储过程实现表之间数据复制功能.两表中列不同,动态的将一表中的数据复制到另一个表中案例 因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复 ...

  4. Java:判断一个字符串中是否存在另一个字符子串以及判断一个字符串中是否存在指定字符

    Java:判断一个字符串中包含指定字符子串,判断一个字符串中存在指定字符 字符串的contains方法可以判断一个字符串中是否存在另一个字符子串,示例如下 String Str = "Hel ...

  5. B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序...

    B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序 select a.*,count(*) as c from a left join b on a.id=b.ai ...

  6. python判断一个列表是否包含另一个列表_Python判断一个list中是否包含另一个list全部元素的方法分析...

    Python判断一个list中是否包含另一个list全部元素的方法分析 本文实例讲述了Python判断一个list中是否包含另一个list全部元素的方法.分享给大家供大家参考,具体如下: 你可以用fo ...

  7. js从一个数组中筛选出另一个数组中存在的值

    js从一个数组中筛选出另一个数组中存在的值 这里从arr中筛选arr1中存在的值,arr2为筛选结果数组 let arr=["1","2","3&qu ...

  8. Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句

    Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句 1.创建数据库表 create table t_student( 表属性以,隔开 最后一行不用,): 2.查看表结构 desc t_st ...

  9. c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...

    本文通过一个简单示例"三个数由小到大排序",将C语言中许多知识点融会贯通起来,这多种方法的实现可以将函数.宏.指针之间的区别和本质清晰的展示给读者,使本来很复杂难以理解的概念变得通 ...

最新文章

  1. c语言过程中的理论杂篇。
  2. div文字自动扩充_文字资料扩充
  3. python rgb 图像_在Python中查找RGB图像的互补图像
  4. java界面化二叉排序树_105-线索化二叉树代码实现2
  5. keil和proteus的联调设置
  6. 微型计算机主机箱内所有部件均由,《计算机应用基础》模拟试题
  7. matlab自带SVM算法例子(附函数详解)
  8. Centos7安装maven过程
  9. C++字符串输入输出转换
  10. (二)电子器件、电子技术和电子电路
  11. .net c#通过Exif获取图片信息(参数)
  12. SCADA系统资料整理-概论
  13. linux微信原生版2.1.5,优麒麟版重新打包,适用于debian内核系统
  14. AVAudioPlayer和AVAudioPlayerDelegate-iOS音频播放器
  15. 以EOF结束输入 PTA 7-12 排序(数组)
  16. Git-Gitlab中如何删除项目
  17. 前端技能树,面试复习第 52 天—— 手写代码:Javascript 基础考核
  18. 南加大计算机本科学费,南加州大学学费多少
  19. linux3.5 usb键盘,CRUX 3.5发布下载,一款轻量级且为i686优化的Linux发行版
  20. Linux 文件、目录与磁盘格式

热门文章

  1. Scrapy框架实例-2(沪江网网课信息)
  2. 百度排名批量查询_一篇讲透百度霸屏引流细节思路与操作玩法
  3. 【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略
  4. 动力环境监控系统包括哪些设备
  5. 从全志和瑞芯微财报看半导体行业内幕(一)
  6. 极致通缩和永动机模型,将推动 PlatoFarm 爆发
  7. 什么是ABCDMIX?
  8. Python学习 day04打卡
  9. 凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网...
  10. android h5调用百度地图,h5页面如何调用百度地图获取当前位置(代码)