mysql 多表 update sql语句总结
2023-09-11 14:14:14 时间
mysql 多表 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'
两张表做关联,更新了ProductPrice表的price字段和Product表字段的dateUpdate两个字段。
相关文章
- mysql索引总结(4)-MySQL索引失效的几种情况
- 数据库MySQL经典面试题之SQL语句
- 精讲Mysql各种高难度Sql编写(一)
- 解决Navicat连接MySQL时“Client does not support authentication protocol requested by server; consider upgrading MySQL client”的问题
- 【MySQL】存储引擎
- 【MySQL高级】优化SQL步骤
- 【MySQL高级】MySql中常用工具及Mysql 日志
- mysql 中常用的 sql 语句
- mysql远程连接 Host * is not allowed to connect to this MySQL server
- MySQL: 数学函数
- MySQL测试数据库
- 记录一个mysql按日期分组统计的查询
- mysql下出现Unknown column ‘xx‘ in ‘on clause‘的完全解决方法
- MySQL命令行导出数据库(sql脚本)
- 在mysql命令行下执行sql文件
- 数据库 SQL Server 到 MySQL 迁移方法总结
- 《PHP、MySQL和Apache入门经典(第5版)》一第2章 安装和配置MySQL2.1 MySQL的当前版本和未来版本
- sql语言实践之自学SQL网(SQL Lesson12)
- 转 MySQL权限管理
- Linux-012-Centos mysql 5.6.50 忘记密码,重置密码
- sql: MySQL and Microsoft SQL Server Stored Procedures IN, OUT using csharp code
- MySql的sql_mode
- mysql sql语句大全
- mysql 无法退出sql命令行编辑
- mysql 自定义函数与自定义存储过程的调用方法
- Mysql 根据时间戳按年月日分组统计
- liunux mysql MySQL表名不区分大小写的设置方法
- 浅析MySQL中的计算列(Generated Column列)与计算字段的介绍与应用-如何让数据库中某个字段随时间自动更新
- C++ OTL MySQL(Windows/Linux) V8.1
- sql server该账户当前被锁定,所以用户'sa'登录失败。系统管理员无法将该账户解锁。(Microsoft SQL Server,错误:18486),登录错误18456
- mysql一个SQL案例
- sql-如何提高SQL查询的效率?
- Eclipse中使用MySql遇到:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading o