update的多表更新的试验

        受access的sql语句的影响,一直习惯的是用 update (连接表) set ... where ...,坏处是写起来很复杂,别名一大堆,事后自己都看不懂。

发现还其实可以直接就可以对多表更新

UPDATE a
SET a.t2 = b.t2
FROM x1 a, x2 b
WHERE a.t1 = b.t1

作一些试验:

x1表:

    t1    t2    f_id

    a    1

    b    2

    c    3

    a    4

    b    5

    c    6

x2表

    t1    t2    f_id

    a    7

    b    8

    c    9

试验1:

UPDATE a
SET a.t2 = b.t2
FROM x1 a, x2 b
WHERE a.t1 = b.t1

结果:x1表中6行都被更新了。(起码是左连接的方式)

试验2:

UPDATE b
SET b.t2 = a.t2
FROM x1 a, x2 b
WHERE a.t1 = b.t1

结果为更新了三行,且数值为4,5,6。即用x1后面的三行去更新的。

试验3:

UPDATE a
SET a.t2 = b.t2
FROM x1 a, x2 b

结果六行全变9。

结论:用这种方式,两个表之间不是left join或right join 或者inner join,而是一种完全连接的方式(where对全连接的结果进行了限制)。对某列的更新操作,在该列值有多行时,只有最后一行生效。

了解了工作方式,就可以大胆应用了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件测试经验与教训

测试工程师SQL面试题

测试人员工作在工作中会用到SQL来辅助测试,求职时也常常会在笔试环节遇到各种各样的sql设计题目,张老师整理了一些工作中常用的sql知识点,希望对大家有所帮助。

1.9K3
来自专栏乐沙弥的世界

Oracle 重建索引的必要性

      索引重建是一个争论不休被不断热烈讨论的议题。当然Oracle官方也有自己的观点,我们很多DBA也是遵循这一准则来重建索引,那就是Oracle建议对于...

1241
来自专栏杨建荣的学习笔记

MySQL 5.7中锁的一个通用问题

前几天分析了一个死锁的问题,有一个网友看了以后,就发了邮件给我问一个问题。一般来说,能够发送邮件提出问题的同学,都是很认真的,因为他要准备好日志,准备好操作过...

3839
来自专栏杨建荣的学习笔记

一个SQL语句引发的ORA-00600错误排查(二)(r9笔记第65天)

继昨天一个SQL语句导致的ORA-00600错误之后,我给出了背景和初步的分析结果,今天来给出我的结论,当然说明原因不是我的本意,还有反思。 首先语句类似这样的...

3827
来自专栏iMySQL的专栏

MySQL FAQ 系列 :如何查看当前最新事务 ID

个别时候可能需要查看当前最新的事务 ID,以便做一些业务逻辑上的判断(例如利用事务 ID 变化以及前后时差,统计每次事务的响应时长等用途)。本文将介绍两种方法可...

3670
来自专栏编程之路

学校报修管理系统设计

需求分析:学校报修类别有两种,常规报修和电教报修。教师提交报修填写报修单后,自动派单到维修人员,维修人员接单维修,维修后结束报修单,报修教师对维修人员进行评价。...

7776
来自专栏与神兽党一起成长

使用left join查找用户的所有同事

为了找出某个用户所在组织(部门)的所有员工,即该用户的所有同事包括他自己,常见的做法是通过用户找到他所在的组织(部门),然后再通过部门找到所有的员工。而我在实践...

631
来自专栏PHP在线

MyISAM InnoDB 区别

 MyISAM 和 InnoDB 讲解   InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的...

3695
来自专栏架构师之路

一分钟了解索引技巧 | 架构师之路

花1分钟时间,了解聚集索引,非聚集索引,联合索引,索引覆盖。 举例,业务场景,用户表,表结构为: t_user( uid primary key, login_...

39212
来自专栏编程一生

预告片优化方案

802

扫码关注云+社区

领取腾讯云代金券