表的插入、更新、删除、合并操作_21_合并表中数据
生活随笔
收集整理的這篇文章主要介紹了
表的插入、更新、删除、合并操作_21_合并表中数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ?合并表中數據
需求描述
需求:如果emp_temp表中的員工存在于emp中,則將他們的提成(comm字段)更新為1000;
對于提成已經更新為1000的員工,如果他們的工資(SAL字段)少于2000,則從emp_temp表里刪除他們;
其它情況從EMP表里取員工編號(EMPNO字段)、員工名稱(ENAME字段)、部門號(DEPTNO字段)插入到emp_temp中.
解決方法:通過Merge into語法對插入、更新、刪除進行操作。
注: 數據庫數據集SQL腳本詳見如下鏈接地址
員工表結構和數據初始化SQL腳本
SQL代碼
-- Oracle: CREATE TABLE emp_temp ASSELECT deptno,empno,ename,comm FROM empWHERE empno IN (7782,7839,7934);SELECT et.empno,et.ename,et.deptno,et.comm,emp.sal FROM emp_temp et JOIN emp ON et.empno = emp.empno;MERGE INTO emp_temp etUSING(SELECT empno,ename,deptno,comm,SAL FROM emp) empON (et.empno = emp.empno)WHEN MATCHED THENUPDATE SET et.comm = 1000DELETE WHERE (SAL < 2000)WHEN NOT MATCHED THENINSERT (et.empno,et.ename,et.deptno,et.comm) VALUES(emp.empno,emp.ename,emp.deptno,emp.comm);SELECT et.empno,et.ename,et.deptno,et.comm,emp.salFROM emp_temp etJOIN empON et.empno = emp.empno;執行結果
-- Sql Server: CREATE TABLE emp_temp(deptno int NULL,empno int NOT NULL,ename varchar(15) NULL,comm decimal(7, 2) NULL )INSERT INTO emp_temp SELECT deptno,empno,ename,comm FROM emp WHERE empno IN (7782,7839,7934);BEGIN TRAN SELECT et.empno,et.ename,et.deptno,et.comm,emp.sal FROM emp_temp et JOIN emp ON et.empno = emp.empno;MERGE INTO emp_temp etUSING(SELECT empno,ename,deptno,comm,SAL FROM emp) empON (et.empno = emp.empno)WHEN MATCHED AND SAL < 2000 THEN DELETE WHEN MATCHED THENUPDATE SET et.comm = 1000WHEN NOT MATCHED THEN INSERT VALUES(emp.deptno,emp.empno,emp.ename,emp.comm);SELECT et.empno,et.ename,et.deptno,et.comm,emp.sal FROM emp_temp et JOIN emp ON et.empno = emp.empno;ROLLBACK TRAN注:
WHEN MATCHED AND SAL < 2000 THEN
?? DELETE
要寫在前面,如果和UPDATE互換了位置,則會報如下錯:
消息 5324,級別 16,狀態 1,第 11 行
在 MERGE 語句中,帶搜索條件的 'WHEN MATCHED' 子句不能出現在不帶搜索條件的 'WHEN MATCHED' 子句后。
總結
以上是生活随笔為你收集整理的表的插入、更新、删除、合并操作_21_合并表中数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 饺子皮怎么做好吃 手工饺子皮制作技巧分享
- 下一篇: 从临淄御泉湾的东北方向是哪里?