日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2023/12/2 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我相信一個(gè)連接的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;

將內(nèi)容從一個(gè)表格復(fù)制到另一個(gè)表格的簡單方法如下:

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

您也可以添加條件來獲取復(fù)制的特定數(shù)據(jù)。

對于SQL Server 2008 +使用MERGE而不是專有的UPDATE ... FROM語法有一些吸引力。

除了作為標(biāo)準(zhǔn)的SQL并因此更具可移植性之外,如果源端有多個(gè)連接的行(因此在更新中使用多個(gè)可能的不同值),而不是最終的結(jié)果是不確定的。

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

不幸的是,select使用哪一個(gè)可能不會(huì)純粹地歸結(jié)為偏愛的風(fēng)格。 在SQL Server中MERGE的實(shí)現(xiàn)已經(jīng)受到各種錯(cuò)誤的困擾。 Aaron Bertrand在這里匯編了一份報(bào)告的清單。

似乎你正在使用MSSQL,然后,如果我沒有記錯(cuò),它是這樣做的:

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

我有同樣的問題, foo.new被設(shè)置為null的foo行沒有匹配的鍵在bar 。 我在Oracle中做了這樣的事情:

更新foo

設(shè)置foo.new =(selectbar.new

從酒吧

其中foo.key = bar.key)

哪里存在(select1

從酒吧

其中foo.key = bar.key)

未來開發(fā)者的通用答案。

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

我已經(jīng)使用以上所有的查詢,但他們不工作; 當(dāng)我使用這個(gè)時(shí),就完成了。

希望你明白。 謝謝

感謝您的回應(yīng)。 我find了一個(gè)解決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)

在同一個(gè)表內(nèi)更新:

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中不起作用。 這句話讓我想起了我的老同學(xué):

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將整個(gè)數(shù)據(jù)集與較小的子集進(jìn)行比較,因此出現(xiàn)NULL,那么當(dāng)然會(huì)有匹配問題。 這必須通過使用正確的JOIN編寫正確的SQL來解決,而不是通過使用NOT IN來避免問題。 在這種情況下,您可能會(huì)遇到其他問題,使用NOT IN或NOT EXISTS 。

我的投票是最上面的一個(gè),這是通過joinSQL Server基于另一個(gè)表更新表的傳統(tǒng)方式。 就像我所說的,除非先join它們,否則不能在SQL Server的同一個(gè)UPDATE語句中使用兩個(gè)表。

它適用于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 );

我認(rèn)為這是一個(gè)簡單的例子,有人可能會(huì)更容易,

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

這將允許您根據(jù)在另一個(gè)表中找不到列值來更新表。

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 )

這將根據(jù)在兩個(gè)表中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 )

嘗試這個(gè) :

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

我想添加一個(gè)額外的東西。

不要使用相同的值更新值,會(huì)產(chǎn)生額外的日志logging和不必要的開銷。 看下面的例子 – 它將只執(zhí)行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之前執(zhí)行JOIN。

訪問SQL

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

使用以下查詢塊根據(jù)ID更新Table1與Table2:

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

這是解決這個(gè)問題最簡單的方法。

總結(jié)

以上是生活随笔為你收集整理的按主键更新另一个表oracle,SQL根据ID匹配从一个表更新到另一个表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。