按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表

我相信一个连接的UPDATE FROM将有助于:

MS SQL

UPDATE Sales_Import SET Sales_Import.AccountNumber = RAN.AccountNumber FROM Sales_Import SI INNER JOIN RetrieveAccountNumber RAN ON SI.LeadID = RAN.LeadID;

MySQL和MariaDB

UPDATE Sales_Import SI, RetrieveAccountNumber RAN SET SI.AccountNumber = RAN.AccountNumber WHERE SI.LeadID = RAN.LeadID;

将内容从一个表格复制到另一个表格的简单方法如下:

UPDATE table2 SET table2.col1 = table1.col1, table2.col2 = table1.col2, ... FROM table1, table2 WHERE table1.memberid = table2.memberid

您也可以添加条件来获取复制的特定数据。

对于SQL Server 2008 +使用MERGE而不是专有的UPDATE ... FROM语法有一些吸引力。

除了作为标准的SQL并因此更具可移植性之外,如果源端有多个连接的行(因此在更新中使用多个可能的不同值),而不是最终的结果是不确定的。

MERGE INTO Sales_Import USING RetrieveAccountNumber ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID WHEN MATCHED THEN UPDATE SET AccountNumber = RetrieveAccountNumber.AccountNumber;

不幸的是,select使用哪一个可能不会纯粹地归结为偏爱的风格。 在SQL Server中MERGE的实现已经受到各种错误的困扰。 Aaron Bertrand在这里汇编了一份报告的清单。

似乎你正在使用MSSQL,然后,如果我没有记错,它是这样做的:

UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] = RetrieveAccountNumber.AccountNumber FROM RetrieveAccountNumber WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID

我有同样的问题, foo.new被设置为null的foo行没有匹配的键在bar 。 我在Oracle中做了这样的事情:

更新foo

设置foo.new =(selectbar.new

从酒吧

其中foo.key = bar.key)

哪里存在(select1

从酒吧

其中foo.key = bar.key)

未来开发者的通用答案。

SQL Server

UPDATE t1 SET t1.column = t2.column FROM Table1 t1 INNER JOIN Table2 t2 ON t1.id = t2.id;

Oracle(和SQL Server)

UPDATE t1 SET t1.colmun = t2.column FROM Table1 t1, Table2 t2 WHERE t1.ID = t2.ID;

MySQL的

UPDATE Table1 t1, Table2 t2 SET t1.column = t2.column WHERE t1.ID = t2.ID;

对于PostgreSQL:

UPDATE Sales_Import SI SET AccountNumber = RAN.AccountNumber FROM RetrieveAccountNumber RAN WHERE RAN.LeadID = SI.LeadID;

对于MySql工作正常:

UPDATE Sales_Import SI,RetrieveAccountNumber RAN SET SI.AccountNumber = RAN.AccountNumber WHERE SI.LeadID = RAN.LeadID

对于MySql :

UPDATE table1 JOIN table2 ON table1.id = table2.id SET table1.name = table2.name, table1.`desc` = table2.`desc`

对于Sql Server :

UPDATE table1 SET table1.name = table2.name, table1.[desc] = table2.[desc] FROM table1 JOIN table2 ON table1.id = table2.id

我已经使用以上所有的查询,但他们不工作; 当我使用这个时,就完成了。

希望你明白。 谢谢

感谢您的回应。 我find了一个解决scheme。

UPDATE Sales_Import SET AccountNumber = (SELECT RetrieveAccountNumber.AccountNumber FROM RetrieveAccountNumber WHERE Sales_Import.leadid =RetrieveAccountNumber.LeadID) WHERE Sales_Import.leadid = (SELECT RetrieveAccountNumber.LeadID FROM RetrieveAccountNumber WHERE Sales_Import.leadid = RetrieveAccountNumber.LeadID)

在同一个表内更新:

DECLARE @TB1 TABLE ( No Int ,Name NVarchar(50) ,linkNo int ) DECLARE @TB2 TABLE ( No Int ,Name NVarchar(50) ,linkNo int ) INSERT INTO @TB1 VALUES(1,'changed person data', 0); INSERT INTO @TB1 VALUES(2,'old linked data of person', 1); INSERT INTO @TB2 SELECT * FROM @TB1 WHERE linkNo = 0 SELECT * FROM @TB1 SELECT * FROM @TB2 UPDATE @TB1 SET Name = T2.Name FROM @TB1 T1 INNER JOIN @TB2 T2 ON T2.No = T1.linkNo SELECT * FROM @TB1

有人build议下面的SQL,在SQL Server中不起作用。 这句话让我想起了我的老同学:

UPDATE table2 SET table2.col1 = table1.col1, table2.col2 = table1.col2, ... FROM table1, table2 WHERE table1.memberid = table2.memberid

不build议使用NOT IN或NOT EXISTS所有其他查询。 由于OP将整个数据集与较小的子集进行比较,因此出现NULL,那么当然会有匹配问题。 这必须通过使用正确的JOIN编写正确的SQL来解决,而不是通过使用NOT IN来避免问题。 在这种情况下,您可能会遇到其他问题,使用NOT IN或NOT EXISTS 。

我的投票是最上面的一个,这是通过joinSQL Server基于另一个表更新表的传统方式。 就像我所说的,除非先join它们,否则不能在SQL Server的同一个UPDATE语句中使用两个表。

它适用于postgresql

UPDATE application SET omts_received_date = ( SELECT date_created FROM application_history WHERE application.id = application_history.application_id AND application_history.application_status_id = 8 );

我认为这是一个简单的例子,有人可能会更容易,

DECLARE @TB1 TABLE ( No Int ,Name NVarchar(50) ) DECLARE @TB2 TABLE ( No Int ,Name NVarchar(50) ) INSERT INTO @TB1 VALUES(1,'asdf'); INSERT INTO @TB1 VALUES(2,'awerq'); INSERT INTO @TB2 VALUES(1,';oiup'); INSERT INTO @TB2 VALUES(2,'lkjhj'); SELECT * FROM @TB1 UPDATE @TB1 SET Name =S.Name FROM @TB1 T INNER JOIN @TB2 S ON S.No = T.No SELECT * FROM @TB1

这将允许您根据在另一个表中找不到列值来更新表。

UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN ( SELECT * FROM ( SELECT table1.id FROM table1 LEFT JOIN table2 ON ( table2.column = table1.column ) WHERE table1.column = 'some_expected_val' AND table12.column IS NULL ) AS Xalias )

这将根据在两个表中find的列值来更新表格。

UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN ( SELECT * FROM ( SELECT table1.id FROM table1 JOIN table2 ON ( table2.column = table1.column ) WHERE table1.column = 'some_expected_val' ) AS Xalias )

尝试这个 :

UPDATE Table_A SET Table_A.AccountNumber = Table_B.AccountNumber , FROM dbo.Sales_Import AS Table_A INNER JOIN dbo.RetrieveAccountNumber AS Table_B ON Table_A.LeadID = Table_B.LeadID WHERE Table_A.LeadID = Table_B.LeadID

我想添加一个额外的东西。

不要使用相同的值更新值,会产生额外的日志logging和不必要的开销。 看下面的例子 – 它将只执行2条logging上的更新,尽pipe链接在3上。

DROP TABLE #TMP1 DROP TABLE #TMP2 CREATE TABLE #TMP1(LeadID Int,AccountNumber NVarchar(50)) CREATE TABLE #TMP2(LeadID Int,AccountNumber NVarchar(50)) INSERT INTO #TMP1 VALUES (147,'5807811235') ,(150,'5807811326') ,(185,'7006100100007267039'); INSERT INTO #TMP2 VALUES (147,'7006100100007266957') ,(150,'7006100100007267039') ,(185,'7006100100007267039'); UPDATE A SET A.AccountNumber = B.AccountNumber FROM #TMP1 A INNER JOIN #TMP2 B ON A.LeadID = B.LeadID WHERE A.AccountNumber <> B.AccountNumber --DON'T OVERWRITE A VALUE WITH THE SAME VALUE SELECT * FROM #TMP1

我想为Access SQL或VBA代码添加此更新:我们必须在SET之前执行JOIN。

访问SQL

UPDATE Sales_Import INNER JOIN RetrieveAccountNumber ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber;

使用以下查询块根据ID更新Table1与Table2:

UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;

这是解决这个问题最简单的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】电大中专市场营销管理30分钟交卷作业 题库

1.下列关于产品的叙述错误的是&#xff08; &#xff09; A.它实际上是向人传送服务的工具 B.产品是指能够满足人类某种需要或欲望的东西 C.通常可分为实体产品和无形产品 D.无形产品主要指产品信息 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;C 2.企业目标的主要…

mockito_Eclipse的Mockito模板

mockito有时候&#xff0c;我想念树林里的树木-那是一段令人不安的长时间。 我最近才再次意识到这一点&#xff0c;在无数次中键入了一个更详细的模仿表达式之一。 有问题的语句是一个doAnswer(Answer)构造&#xff0c;使用涉及到的静态导入和泛型代码进行编码总是很麻烦。 尽…

【渝粤教育】电大中专建筑力学作业 题库

1.当变形在所研究的问题中成为主要因素时一般就不能再把物体看作是刚体了。 A.错误 B.正确 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.外效应使物体的形状发生变化。 A.错误 B.正确 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 3.约束必然对被…

linux系统运行powerbi,使用 Power BI 服务 - Power BI | Microsoft Docs

快速入门 - 使用 Power BI 服Quickstart - Getting around in Power BI service10/12/2020本文内容备注Power BI 正在转换为新外观&#xff0c;文档中的某些图像可能与服务中显示的图像不匹配。Power BI is moving to a new look, and some images in the documentation may no…

【渝粤教育】电大中专微生物与寄生虫基础作业 题库

1.属于真核型微生物的是&#xff08;&#xff09;。 A.衣原体 B.放线菌 C.真菌 D.病毒 E.支原体 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.下列哪一个特点不是微生物的共有特点&#xff08;&#xff09; A.结构简单 B.肉眼不直接可见 C.需要借助显微镜观察 …

ue 编写linux脚本,UltraEdit23 sh文件 (shell脚本)着色

网上有UltraEdit早期版本的添加方法&#xff1b;但是这新版本有点不同&#xff1b;方法如下&#xff1a;安装后&#xff0c;到AppData\Roaming\IDMComp\UltraEdit\wordfiles 目录下添加UnixShell.uew&#xff1b;文件内容和网上的一样&#xff1a;/L20"UNIX Shell Scripts…

JMetro版本4.8已发布

再一次问好&#xff01; JMetro Java 4.8版JavaFX主题刚刚发布。 我们即将接近下一个主要版本的版本5.0。 这是已经过彻底改造的旧样式&#xff1a; 日期选择器 树视图 以及经过调整或更改了CSS结构的旧版本&#xff1a; 表格检视 列表显示 组合框 评级控制 4.8版详细…

【渝粤教育】电大中专新媒体营销实务 (3)作业 题库

1.&#xff08; &#xff09;对新媒体的定义为&#xff1a;“以数字信息技术为基础&#xff0c;以互动传播为特点&#xff0c;具有创新形态的媒体。” A.新传媒产业联盟秘书长王斌 B.华纳兄弟总裁施瓦茨威格 C.联合国教科文组织 正确 正确答案&#xff1a;左边查询 学生答案&am…

【渝粤教育】电大中专测量学作业 题库

1.测量学是研究地球的形状和大小以及确定地面点&#xff08;&#xff09;位置的科学。 A.平面 B.空间 C.曲面 D.高程 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.测量学中的水准面是一个&#xff08;&#xff09;。 A.斜平面 B.水平面 C.竖直面 D.曲面 正确 正…

【渝粤教育】电大中专电商运营实操 (14)作业 题库

1.电子商务最重要的是“商务”&#xff0c;而网站只不过是电子商务的后台支撑。 &#xff08; &#xff09; A.正确 B.错误 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.网上购物仅仅是电子商务的一小部分&#xff0c;而完整的电子商务过程是一切利用现代…

linux view查看日志命令,linux查看日志文件内容命令tail、cat、tac、head、echo、vi

linux查看日志文件内容命令tail、cat、tac、head、echotail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,---------------------------linux 如何显示一个文件的某几行(中间几行)从第3000行开始&#xff0c;显示1000行。即显示3000~3999行cat fi…

【渝粤教育】电大中专电商运营实操作业 题库

1.电子商务最重要的是“商务”&#xff0c;而网站只不过是电子商务的后台支撑。 &#xff08; &#xff09; A.错误 B.正确 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.网上购物仅仅是电子商务的一小部分&#xff0c;而完整的电子商务过程是一切利用现代…

【渝粤教育】电大中专电子商务网站建设与维护 (21)作业 题库

1.阿里巴巴是于1999年创立的&#xff08; &#xff09;的网上贸易市场平台。 A.零售商对消费者 B.企业对消费者 C.企业对企业 D.企业对零售商 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.阿里巴巴网站的不足不包括&#xff08; &#xff09; A.“诚信通”…

linux 下对u盘分区吗,linux对中毒u盘分区和格式化

linux对中毒u盘分区和格式化发布时间:2008-08-29 10:36:49来源:红联作者:aibss原创人&#xff1a;a3563u盘情况是4G&#xff0c;分2个区&#xff0c;分别为2G。其中一个分区在windows下“我的电脑”里看不见&#xff0c;但在磁盘管理里能看见&#xff0c;但没有盘符&#xff0c…

Java 11快多少?

尽管大多数开发人员仍然使用Java 8 &#xff0c;但Java 11还是在不久前发布的。 让我们看看其中哪个对OptaPlanner更快。 找出答案的最佳方法当然是运行OptaPlanner基准测试。 本文是我们针对Java 8的类似文章的后续文章 。 基准方法 为了运行基准测试&#xff0c;我们使用了&…

linux5.9安装教程,Linux内核5.9的最重要功能及安装方法

原标题&#xff1a;Linux内核5.9的最重要功能及安装方法Linux内核5.9带来了吸引数据中心管理员的诸多性能提升。本文作者着重介绍了改进之处&#xff0c;并介绍了如何安装主线内核。与5.8一样&#xff0c;Linux内核5.9确实没有任何改变游戏规则的功能&#xff0c;至少对普通用户…

远程桌面服务怎么测试_快速的远程服务测试

远程桌面服务怎么测试测试与远程服务交互的代码通常非常困难。 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量。 在大多数情况下&#xff0c;您对从服务中获取的数据的控制为零&#xff0c;这使得断言至少很难说。 不久前&#xff0c;我使用VCR库针对远程服务编…

linux 编译src.rpm,CentOS6.5下编译src.rpm包的内核

CentOS6.5原生内核版本是Linux 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux在网上下载对应版本的src.rpm包&#xff1a;kernel-2.6.32-431.el6.src.rpmhttp://rpm.pbone.net/index.php3/stat/4/idpl/24668468/dir/scientific_l…

Apache Payara:让我们加密

不久前&#xff0c;我写了一个小教程 &#xff0c;介绍如何生成“让我们加密SSL”证书并将其安装在Glassfish Java EE平台上。 这个技巧对我来说是一个奇迹&#xff0c;但是每三个月必须手动更新和重新安装证书变得很烦人。 我做了一些研究&#xff0c;并且与第一个教程一样&a…

linux命令 dstat,关于linux:每天学一个-Linux-命令103dstat

命令简介dstat 命令是一个用来替换 vmstat、iostat、netstat、nfsstat 和 ifstat 这些命令的工具&#xff0c;通用的系统资源统计工具&#xff0c;是一个全能零碎信息统计工具。[rootcentos7 ~]# dstat-bash: dstat: command not found[rootcentos7 ~]# yum install dstat -yds…