sql merge into
連表更新操作:merge into
1、UPDATE或INSERT
2、UPDATE和INSERT子句可以加WHERE子句
3、ON條件中使用常量過濾謂詞來insert所有的行到目標表中,不需要連線源表和目標表
4、UPDATE子句後面可以跟DELETE子句來去除一些不需要的行
1。根據B表查詢結果表C 更新表A 當year相等的時候,如果A表沒有則插入C表的內容
MERGE INTO A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON (A.id=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR
WHEN NOT MATCHED THEN
INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit;
2.只進行update操作,利用表B查詢結果C去更新表A 的資料
merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON(A.ID=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR;
3.利用表B的查詢資料表C對A表進行插入操作,
merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON(A.ID=C.AID)
WHEN NOT MATCHED THEN
insert(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
4.利用表B查詢的資料表C對錶A進行更新的新增操作,在更新和新增的時候對on篩選的記錄再做一次條件判斷,控制哪些需要更新,哪些需要插入。
merge into A_MERGE A USING (select B.AID,B.name,B.year,B.city from B_MERGE B) C
ON(A.id=C.AID)
when matched then
update SET A.name=C.name where C.city != '江西'
when not matched then
insert(A.ID,A.name,A.year) values(c.AID,C.name,C.year) where C.city='江西';
5.無條件的insert
有時候我們需要將一張表中所有的資料插入到另一張表,此時就可以新增常量過濾來實現,讓其只滿足匹配和不匹配,這樣就只有update或者只有insert,這裡我們要無條件全插入,則只需將on中的條件設定為永假。
merge into C_MERGE C USING (select B.AID,B.NAME,B.City from B_MERGE B) C ON (1=0)
when not matched then
insert(C.ID,C.NAME,C.City) values(B.AID,B.NAME,B.City);
6.帶delete 的update
MERGE提供了在執行資料操作時清除行的選項. 你能夠在WHEN MATCHED THEN UPDATE子句中包含DELETE子句.
DELETE子句必須有一個WHERE條件來刪除匹配某些條件的行.匹配DELETE WHERE條件但不匹配ON條件的行不會被從表中刪除.
但我覺得這個帶where條件的update差不多,都是控制update,完全可以用帶where條件的update來實現。
相關文章
- 深入SQL之merge intoSQL
- SQL中Merge的用法SQL
- sql server merge 的用法SQLServer
- SQL入門之10 MERGESQL
- SQL 高階語法 MERGE INTOSQL
- 【sql調優之執行計劃】merge semi join and merge anti joinSQL
- sql server merge 做insert和updateSQLServer
- 使用SQL MERGE語句組合表SQL
- SQL Server中的Merge關鍵字SQLServer
- merge sql error, dbType sqlserver, druid1.1.10, sql : nullSQLErrorServerUINull
- SQL Server 2008 MERGE語法SQLServer
- ORACLE sql merge into update where條件位置與效能消耗OracleSQL
- 【sql調優之執行計劃】merge sort joinSQL
- SQL Server 2008 優化MERGE語句效能SQLServer優化
- SQL Server 2008中的新語句:MERGESQLServer
- 簡單練習Microsoft SQL Server MERGE同步兩個表ROSSQLServer
- SQL Server的Merge —— 一步實現 insert,update,deleteSQLServerdelete
- 大表範圍掃描走SORT MERGE JOIN的SQL優化SQL優化
- 【SQL Server學習筆記】Delete 語句、Output 子句、Merge語句SQLServer筆記delete
- 【sql調優之執行計劃】merge join cartesian and buffer sortSQL
- mysql mergeMySql
- Merge Or Rebase
- git mergeGit
- MYSQL merge union merge sort_union 的不同MySql
- SQLServer MERGE 用法SQLServer
- jQuery.merge()jQuery
- oracle merge into用法Oracle
- oracle_mergeOracle
- Merge into 學習
- git 中止mergeGit
- git merge origin master git merge origin/master區別GitAST
- Merge語法限制
- git merge & git rebaseGit
- Perl 模組 Hash::Merge
- MERGE 儲存引擎儲存引擎
- oracle hint no_mergeOracle
- git merge簡介Git
- Oracle Merge語法Oracle