当前位置: 首页 > news >正文

MySQL基础备忘(3)之update多表更新

from:脚本之家(http://www.jb51.net/article/32648.htm),略有更新。


假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price;另外一张表是ProductPrice表,我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。 
在Mysql中我们有几种手段可以做到这一点。


方法1

使用类似于update table1 t1, table2 ts ...的方式。代码如下:

UPDATE product p, productPrice pp 
SET pp.price = pp.price * 0.2 
WHERE p.productId = pp.productId 
AND p.dateCreated < '2017-01-01'

方法2

另外一种方法是使用inner join: 

UPDATE product p 
INNER JOIN productPrice pp 
ON p.productId = pp.productId 
SET pp.price = pp.price * 0.2 
WHERE p.dateCreated < '2017-01-01'

方法3

另外,我们也可以使用left outer join来做多表update,比方说如果ProductPrice表中没有产品价格记录的话,将Product表的isDeleted字段置为1,如下sql语句: 

UPDATE product p 
LEFT JOIN productPrice pp 
ON p.productId = pp.productId 
SET p.deleted = 1 
WHERE pp.productId IS null


补充

另外,上面的几个例子都是两张表之间做关联,但是只更新一张表中的记录,其实是可以同时更新两张表的,如下sql: 

UPDATE product p 
INNER JOIN productPrice pp 
ON p.productId = pp.productId 
SET pp.price = pp.price * 0.8, 
p.dateUpdate = CURDATE() 
WHERE p.dateCreated < '2004-01-01'


两张表做关联,更新了ProductPrice表的price字段和Product表字段的dateUpdate两个字段。




相关文章:

  • iPhone 丢失
  • Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
  • Ant多渠道批量打包
  • CCF201409-4 最优配餐(100分)
  • ios的delegate机制
  • 同义词
  • MPLS和LDP标签分发
  • JSON 生成 C# Model
  • Golang 知识点总结
  • [raspberry pi3] 串口线使用
  • 如何连接别人电脑上的ORACLE数据库
  • 虚拟机 主机无法访问虚拟机中Linux上的tomcat服务
  • 【244】◀▶IEW-Unit09
  • ld: library not found for -lPods-AFNetworking的可能原因
  • 读书笔记二
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • dva中组件的懒加载
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • JAVA SE 6 GC调优笔记
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Terraform入门 - 3. 变更基础设施
  • 官方解决所有 npm 全局安装权限问题
  • 猴子数据域名防封接口降低小说被封的风险
  • 配置 PM2 实现代码自动发布
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • C# - 为值类型重定义相等性
  • Nginx实现动静分离
  • ​一些不规范的GTID使用场景
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #android不同版本废弃api,新api。
  • #Linux(权限管理)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $(function(){})与(function($){....})(jQuery)的区别
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /var/log/cvslog 太大
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @ConfigurationProperties注解对数据的自动封装
  • @media screen 针对不同移动设备
  • @ModelAttribute使用详解
  • [ Linux ] Linux信号概述 信号的产生
  • [BT]BUUCTF刷题第9天(3.27)
  • [BZOJ1008][HNOI2008]越狱
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [GN] DP学习笔记板子
  • [Java]快速入门二叉树,手撕相关面试题
  • [Java]深入剖析常见排序
  • [JavaEE]线程的状态与安全
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [JS]变量