今天在sql训练题库中看到了这题,这是一道很有代表性的多表修改题,其实解出这道题并不难,无论是mysql中还是oracle中都有很多种解法,接下来就好好归纳一下这些解法。

msyql中多表修改

对于mysql中常用的多表修改语句,还是用例子来解释一下吧。

//建表create table aaa(id int,value1 int(5),value2 int(5),value3 int(5),value4 int(5));create table bbb like aaa;//插入数据insert into aaa values(1,0,0,0,0),(2,0,0,0,0),(3,0,0,0,0),(4,0,0,0,0),(5,0,0,0,0),(6,0,0,0,0),(7,0,0,0,0);insert into bbb values(1,11,12,13,14),(3,31,32,33,34),(5,51,52,53,54);//备份create table a1 select * from aaa;create table b1 select * from bbb;
//一般多表修改update a1 set a1.value1 = (select b1.value1 from b1 where a1.id = b1.id),a1.value2 = (select b1.value2 from b1 where a1.id = b1.id);
//表关联多表修改update a1 inner join b1 on a1.id = b1.id set a1.value1 = b1.value1,a1.value2 = b1.value2,a1.value3 = b1.value3;

和上面mysql中语句一样,这个写法比较容易理解,但是效率实在有些不尽人意,如果你们的多表修改只用修改一列(像最上面的那题一样),用这种写法挺好的。

//一般多表修改update a1 set a1.value1 = (select b1.value1 from b1 where a1.id = b1.id),a1.value2 = (select b1.value2 from b1 where a1.id = b1.id);

Merge into

merge into是update和insert语句的结合,可以同时实现update和insert的功能,在这里我就不多解释了,简单介绍一下merge into的语法吧。

merge into 目标表a  ---into指向的目标表就是我们要做更新操作的表。using 源表b---using指向的表不能被更改,它还可以是视图、结果集等。on(a.id = b.id) ---on()里面是用作目标表和源表匹配的条件,条件满足则匹配成功。when matched then ---when matched then 后面接的是修改语句。update set ... when not matched then ---when not matched then 后面接的是新增语句。insert values(....);

exists同样也适用于mysql和oracle,如果没有硬性要求表a根据表b的数据去修改,使用exists也是可以的。使用exists后的sql执行顺序是先执行外查询再执行内查询,所以多表修改就不能将表a1的值改为表a2的值。

update a1 set a1.value1 = 99,a1.value2 = 999,a1.vlaue3=999 where exists(select value1 from b1 where a1.id = b1.id);

更多相关文章

  1. Android(安卓)MediaPlayer 常用方法介绍
  2. Android常用控件
  3. Android(安卓)常用RGB值以及中英文名称
  4. Android(安卓)-- Android(安卓)JUint 与 Sqlite
  5. Android中的常用的对话框
  6. android 当系统存在多个Launcher时,如何设置开机自动进入默认的La
  7. 【【【常用的ubuntu第三方工具及android命令(自存档)】】】二
  8. Android(安卓)MediaPlayer 常用方法介绍
  9. 【android开发】styles.xml常用的设置属性汇总

随机推荐

  1. 学算法的那些年,吴师兄接触的网站、软件、
  2. 这是什么沙雕题目?测试用例居然有人身高为
  3. 惊叹,Pyecharts绘制饼图原来可以如此漂亮!
  4. 结婚这件小事
  5. Matplotlib 动态图还可以这样玩,收藏了!
  6. (美团)巧用数组下标,轻轻松松找出所有元素
  7. 字节一面,面试官告诉我链表掌握的不熟练
  8. 晚上看了轮子哥的知乎想法,我失眠了
  9. 计算机专业的学生怎样练习编程才能把编程
  10. LeetCode 题解:一顿操作猛如虎,一看击败百