表的插入、更新、删除、合并操作_13_通过表关联更新多个字段
生活随笔
收集整理的這篇文章主要介紹了
表的插入、更新、删除、合并操作_13_通过表关联更新多个字段
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 通過表關聯更新多個字段
需求描述
需求:更新emp表里的sal字段的值為temp表里的sal乘以1.5,同時更新ename為temp表里的值, 匹配條件是兩個表的deptno..
解決方法:這里通過UPDATE TableName SET ColName=..FROM TABLENAME1 A JOIN TABLENAME2 B … WHERE …的方式來更新數據.
注: 數據庫數據集SQL腳本詳見如下鏈接地址
員工表結構和數據初始化SQL腳本
SQL代碼
-- Oracle: TRUNCATE TABLE temp; INSERT INTO temp(deptno,deptname,loc,empno,ename,sal) SELECT 50,'Production','Nanjing',7369,'SMITH2',1000 FROM DUAL;update emp a set (sal,ename)=(select b.sal*1.5,b.ename from temp b where b.empno=a.empno) where exists (select 1 from temp b where b.empno=a.empno )SELECT empno,ename,sal FROM emp WHERE empno=7369;執行結果
-- Sql Server: TRUNCATE TABLE temp; INSERT INTO temp(deptno,deptname,loc,empno,ename,sal) SELECT 50,'Production','Nanjing',7369,'SMITH2',1000 BEGIN TRAN SELECT empno,ename,sal FROM emp WHERE empno=7369;UPDATE emp SET emp.sal=b.sal*1.5 ,emp.ename =b.ename from emp a,temp b WHERE a.empno = b.empnoUPDATE emp SET emp.sal=b.sal*1.5 ,emp.ename =b.ename from emp a JOIN temp b ON a.empno = b.empnoSELECT empno,ename,sal FROM emp WHERE empno=7369;ROLLBACK -- Mysql: BEGIN; SELECT empno,ename,sal FROM emp WHERE empno=7369;UPDATE emp a,temp b SET a.sal=b.sal*1.5 ,a.ename=b.ename WHERE a.empno = b.empno;UPDATE emp a INNER JOIN temp b ON a.empno = b.empno SET a.sal=b.sal*1.5 ,a.ename=b.ename;SELECT empno,ename,sal FROM emp WHERE empno=7369;ROLLBACK;注:執行結果相同.
舉一反三:這里多表關聯時用到的是join(inner join),當然你也可以通過left join、right join以及不等值連接。
總結
以上是生活随笔為你收集整理的表的插入、更新、删除、合并操作_13_通过表关联更新多个字段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么吃柚子会拉肚子?
- 下一篇: 熬杨梅汤颜色不够红可以加什么?