mysql 关联更新_MySQL UPDATE多表关联更新
MySQL 可以基于多表查询更新数据。对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致。
下面我们建两张表,一张表为 product 表,用来存放产品信息,其中有产品价格字段 price;另外一张表是 product_price 表。现要将 product_price 表中的价格字段 price 更新为 product 表中价格字段 price 的 80%。
操作前先分别查看两张表的数据,SQL 语句和运行结果如下:
mysql> SELECT * FROM product;
+----+-----------+-----------------------+-------+----------+
| id | productid | productname | price | isdelete |
+----+-----------+-----------------------+-------+----------+
| 1 | 1001 | C语言中文网Java教程 | 100 | 0 |
| 2 | 1002 | C语言中文网MySQL教程 | 110 | 0 |
| 3 | 1003 | C语言中文网Python教程 | 120 | 0 |
| 4 | 1004 | C语言中文网C语言教程 | 150 | 0 |
| 5 | 1005 | C语言中文网GoLang教程 | 160 | 0 |
+----+-----------+-----------------------+-------+----------+
5 rows in set (0.02 sec)
mysql> SELECT * FROM product_price;
+----+-----------+-------+
| id | productid | price |
+----+-----------+-------+
| 1 | 1001 | NULL |
| 2 | 1002 | NULL |
| 3 | 1003 | NULL |
| 4 | 1004 | NULL |
| 5 | 1005 | NULL |
+----+-----------+-------+
5 rows in set (0.01 sec)
下面是 MySQL 多表更新在实践中的几种不同写法。执行不同的 SQL 语句,仔细观察 SQL 语句执行后表中数据的变化,很容易就能理解多表联合更新的用法。
1. 使用UPDATE
在 MySQL 中,可以使用“UPDATE table1 t1,table2,...,table n”的方式来多表更新,SQL 语句和运行结果如下:
mysql> UPDATE product p, product_price pp SET pp.price = p.price * 0.8 WHERE p.productid= pp.productId;
Query OK, 5 rows affected (0.02 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> SELECT * FROM product_price;
+----+-----------+-------+
| id | productid | price |
+----+-----------+-------+
| 1 | 1001 | 80 |
| 2 | 1002 | 88 |
| 3 | 1003 | 96 |
| 4 | 1004 | 120 |
| 5 | 1005 | 128 |
+----+-----------+-------+
5 rows in set (0.00 sec)
2. 通过INNER JOIN
另外一种方法是使用 INNER JOIN 来多表更新。SQL 语句如下:
mysql> UPDATE product p INNER JOIN product_price pp ON p.productid= pp.productid SET pp.price = p.price * 0.8;
Query OK, 5 rows affected (0.09 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> SELECT * FROM product_price;
+----+-----------+-------+
| id | productid | price |
+----+-----------+-------+
| 1 | 1001 | 80 |
| 2 | 1002 | 88 |
| 3 | 1003 | 96 |
| 4 | 1004 | 120 |
| 5 | 1005 | 128 |
+----+-----------+-------+
5 rows in set (0.00 sec)
3. 通过LEFT JOIN
也可以使用 LEFT JOIN 来做多表更新,如果 product_price 表中没有产品价格记录的话,将 product 表的 isdelete 字段设置为 1。在 product 表添加 1006 商品,且不在 product_price 表中添加对应信息,SQL 语句如下。
mysql> UPDATE product p LEFT JOIN product_price pp ON p.productid= pp.productid SET p.isdelete = 1 WHERE pp.productid IS NULL;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM product;
+----+-----------+-----------------------+-------+----------+
| id | productid | productname | price | isdelete |
+----+-----------+-----------------------+-------+----------+
| 1 | 1001 | C语言中文网Java教程 | 100 | 0 |
| 2 | 1002 | C语言中文网MySQL教程 | 110 | 0 |
| 3 | 1003 | C语言中文网Python教程 | 120 | 0 |
| 4 | 1004 | C语言中文网C语言教程 | 150 | 0 |
| 5 | 1005 | C语言中文网GoLang教程 | 160 | 0 |
| 6 | 1006 | C语言中文网Spring教程 | NULL | 1 |
+----+-----------+-----------------------+-------+----------+
6 rows in set (0.00 sec)
4. 通过子查询
也可以通过子查询进行多表更新,SQL 语句和执行过程如下:
mysql> UPDATE product_price pp SET price=(SELECT price*0.8 FROM product WHERE productid = pp.productid);
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> SELECT * FROM product_price;
+----+-----------+-------+
| id | productid | price |
+----+-----------+-------+
| 1 | 1001 | 80 |
| 2 | 1002 | 88 |
| 3 | 1003 | 96 |
| 4 | 1004 | 120 |
| 5 | 1005 | 128 |
+----+-----------+-------+
5 rows in set (0.00 sec)
另外,上面的几个例子都是在两张表之间做关联,只更新一张表中的记录。MySQL 也可以同时更新两张表,如下语句就同时修改了两个表。
UPDATE product p INNER JOIN product_price pp ON p.productid= pp.productid SET pp.price = p.price * 0.8, p.dateUpdate = CURDATE()
两张表做关联,同时更新了 product_price 表的 price 字段和 product 表的 dateUpdate 两个字段。
日常开发中,一般都是用单表 UPDATE 语句,很少写多表关联的 UPDATE。
mysql 关联更新_MySQL UPDATE多表关联更新相关推荐
- mysql update 联合更新_Mysql update多表联合更新的方法小结
下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法 student表 class表 1. 执行 UPDATE student s , clas ...
- mysql update 多表更新_MySQL UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- mysql中3张表如何关联查询_mysql三张表关联查询
三张表,需要得到的数据是标红色部分的.sql如下: select a.uid,a.uname,a.upsw,a.urealname,a.utel,a.uremark, b.rid,b.rname,b. ...
- MySQL查询结果复制到新表(更新、插入)
MySQL查询结果复制到新表(更新.插入): MySQL中可以将查询结果复制到另外的一张表中,复制的话通常有两种情况,一种是更新已有的数据,另一种是插入一条新记录.下面通过例子来说明.首先构建两个测试 ...
- 【转】MySQL中select * for update锁表的问题
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...
- MySQL UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- 22、UPDATE多表关联更新
MySQL 可以基于多表查询更新数据.对于多表的 UPDATE 操作需要慎重,建议在更新前,先使用 SELECT 语句查询验证更新的数据与自己期望的是否一致. 下面我们建两张表,一张表为 produc ...
- mysql join 去重_MySQL Update inner join数据库去重,以及根据一张表的值更新另一张表...
1 问题来源 这几天在项目中遇到一个问题:由于前期设计不合理,导致后期用户录入数据时,基础数据表中有重复多余数据.如下: 出现两个 2G网络测试手机 这样类似的基础数据,直接后果就是用户在使用这个基础 ...
- Oracle update 多表关联更新
需求 有一个部门的表(dept), 部门编号(deptno) 部门员工数(emps) 部门员工的总工资(income) 还有一个员工表(emp) 员工编号(empid) 所属部门(deptno) 工资 ...
最新文章
- 《中国人工智能学会通讯》——1.42 理解情感
- 让语音助手听懂方言,这个数据集能搞定
- 浅析人类最贵、最大的机器学习模型GPT-3及背后隐含的商业逻辑
- 简单几步制作软raid
- mysql -存储过程的学习
- java 数组a赋值给数组b_java编程将a,b数组中不同的数字保存到一个新的数组中
- 如何将实时计算 Flink 与自身环境打通?
- 微信团队分享:微信移动端的全文检索多音字问题解决方案
- fir滤波器matlab实现_关于FIRamp;IIR系统的算法说明以及结果验证(1)
- Flowable快速工作流脚手架_Jsite角色授权不显示
- java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...
- 你不能忽视的HTML语言
- 图像质量评估算法SSIM(结构相似性)
- python24点4张扑克_Python实现扑克24点 ,从此我就没输过。
- 分享:大讲台在线学习平台怎么样,靠谱吗?
- C#实践——计算GPA
- 此计算机上无法找到autocad2017,主编操作win7系统安装autocad2017提示“无法定位inf文件ACAD.inf”的具体步骤...
- 中央财经大学博士后于鲁平:不同于技术和应用,监管永远只能前进一小步!
- Showing All Errors Only Command PhaseScriptExecution failed with a nonzero exit code
- Eclipse优化,关闭不必要的验证,简单粗暴!
热门文章
- 51信用卡 Android 架构演进实践
- 颜色的前世今生20·三原色到底该用哪一个?!
- cad的dwg如何转换成pdf?
- 如何把一个文件压缩成几个固定大小的文件及解压缩
- 深度学习框架tensorflow学习与应用6(防止过拟合dropout,keep_prob =tf.placeholder(tf.float32))
- 上海居住证积分办理攻略,太容易了,快来收藏!!!
- 五、T100采购应付之应付账款核销管理篇
- Workspaces can only be enabled in private projects.
- 原来做炫酷图表这么容易
- 计算机网申兴趣爱好怎么写,网申个人爱好如何填写?