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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

表的插入、更新、删除、合并操作_21_合并表中数据

發布時間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 表的插入、更新、删除、合并操作_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

注:

  • 這里SQL Server和Oracle的merge into語法還是有差異的.SQL Server里如下代碼:
  • WHEN MATCHED AND SAL < 2000 THEN

    ?? DELETE

    要寫在前面,如果和UPDATE互換了位置,則會報如下錯:

    消息 5324,級別 16,狀態 1,第 11 行

    在 MERGE 語句中,帶搜索條件的 'WHEN MATCHED' 子句不能出現在不帶搜索條件的 'WHEN MATCHED' 子句后。

  • 目前Mysql并沒有有merge into的語法.
  • 總結

    以上是生活随笔為你收集整理的表的插入、更新、删除、合并操作_21_合并表中数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。