DELETE

在Mysql4.0之后,mysql开始支持跨表delete。 
Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录。 
假定我们有两张表:Product表和ProductPrice表。前者存在Product的基本信息,后者存在Product的价格。 
第一种跨表删除的方式是不用join,在delete时指定用半角逗号分隔多个表来删除

DELETE p.*, pp.* 
FROM product p, productPrice pp 
WHERE p.productId = pp.productId 
AND p.created < '2004-01-01'

第二种跨表删除的方式是使用inner join在join中指定两表之间的关联关系,如下sql语句:

DELETE p.*, pp.* 
FROM product p 
INNER JOIN productPrice pp 
ON p.productId = pp.productId 
WHERE p.created < '2004-01-01'

注意:跨表删除不必删除所有表的数据,上面的sql语句表会同时删除Product和ProductPrice两张表中的数据,但是你可以指定 DELETE product.*从而只删除product表中的记录,而不处理ProductPrice表中的记录。

跨表删除也可以使用left join,例如我们要删除所有在ProductPrice表中没有记录的Product表记录。如下sql语句:

DELETE p.* 
FROM product p 
LEFT JOIN productPrice pp 
ON p.productId = pp.productId 
WHERE pp.productId is null

UPDATE

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

代码如下:

UPDATE product p, productPrice pp 
SET pp.price = pp.price * 0.8 
WHERE p.productId = pp.productId 
AND p.dateCreated < '2004-01-01' 
 
 
另外一种方法是使用inner join然后更新: 
代码如下:
UPDATE product p 
INNER JOIN productPrice pp 
ON p.productId = pp.productId 
SET pp.price = pp.price * 0.8 
WHERE p.dateCreated < '2004-01-01' 
 
 
另外我们也可以使用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' 

最新文章

  1. qq2440启动linux后出现错误提示request_module: runaway loop modprobe binfmt-464c
  2. python的web压力测试工具-pylot安装使用
  3. Linux C 程序 函数,数组,指针,gdb调试器(SEVEN)
  4. RPC简介与Thrift框架
  5. java cooki的使用
  6. php小测试,难点与分享
  7. 移动端APP列表点透事件处理方法
  8. linux dhcp搭建及pxe无人值守装机
  9. 2017-2018-1 20155214&amp;20155216 实验四:外设驱动程序设计
  10. 简明shell入门
  11. App引导界面,可以这么玩
  12. 【bzoj 2326】【HNOI 2011】数学作业
  13. [Swift]LeetCode78. 子集 | Subsets
  14. orm 复习
  15. js之作用域链到闭包
  16. 人工智能(AI)库TensorFlow 踩坑日记之一
  17. plist反序列化
  18. JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念
  19. Apache tica详述
  20. 人生第一次JAVA编程,电梯(并不算完成版),以及IDEA里使用git

热门文章

  1. MySQL中函数、游标、事件、视图基本应用举例(代码)
  2. Introduction to SharePoint hierarchy
  3. MFC中菜单变灰的问题
  4. CXF.bat
  5. (Python学习9)Python虚拟机中的一般表达式
  6. 用docker cluster store实现kuryr的共享subnet
  7. VS2013提示error C4996: &#39;strcat&#39;: This function or variable may be unsafe. Consider using strcat_s instead.
  8. [ios2]iOS 图片与内存 【转】
  9. PHP定义静态方法的原则
  10. mysql版本,根据经纬度定位排序sql