mysql之关联更新(update join,用b表更新a表记录)

前言

发现之前并没有整理过mysql表关联更新,这里补上。有时候我们需要用b表去更新a表的记录,如果只有一个字段那通常我们可能就update set a.xxx=(select b.xxx from b where a.ib.id) ,但是字段一多,显得就不是特别方便了,加上不好做限制,所以就了update join。

解决思路

主表

CREATE TABLE `unit` (
  `unit_id` int(11) NOT NULL AUTO_INCREMENT,
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格指数',
  `fix_flag` tinyint(1) DEFAULT '0' COMMENT '修复标记'
) ;

修复表/关联更新表

CREATE TABLE `unit_fix` (
  `unit_id` int(11) DEFAULT NOT NULL,
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格指数'
) ;

蹩脚的更新语句

UPDATE unit u 
SET u.bid_unit =( SELECT x.price FROM unit_fix x WHERE x.unit_id = u.unit_id ),
	u.fix_flag = 1 
WHERE
	u.unit_id IN ( SELECT xx.unit_id FROM unit_fix xx );

关联更新语句

#by zhengkai.blog.csdn.net
#MYSQL UPDATE关联更新
UPDATE unit u
JOIN unit_fix uf ON u.unit_id = uf.unit_id 
SET u.price = uf.price,
	u.fix_flag = 1 
WHERE
	uf.tender_id IS NOT NULL;

MySQL UPDATE JOIN语法

在MySQL中,可以在UPDATE语句中使用JOIN子句执行跨表更新。

#by zhengkai.blog.csdn.net
UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2, 
    T2.C3 = expr
WHERE condition
  • 首先,在UPDATE子句之后,指定主表(T1)和希望主表连接表(T2)。 请注意,必须在UPDATE子句之后至少指定一个表。UPDATE子句后未指定的表中的数据未更新。
  • 第二,指定一种要使用的连接,即 INNER JOINLEFT JOINON连接条件 。JOIN子句必须出现在UPDATE子句之后。
  • 第三,要为要更新的T1和/或T2表中的列分配新值 。SET
  • 第四,WHERE子句中的条件用于指定要更新的行,例如什么值不为空之类。

如果您学习过了UPDATE语句教程,您可能会注意到使用以下语法更新数据交叉表的另一种方法:

#UPDATE交叉更新
UPDATE T1, T2
SET T1.c2 = T2.c2,
	T1.c3 = T2.c3
WHERE T1.id= T2.id AND condition

在这个UPDATE交叉更新语句具有隐式INNER JOIN子句的UPDATE JOIN工作相同。也就是等同于:

#UDATE关联更新
UPDATE T1
INNER JOIN T2 ON T1.id = T2.id
SET T1.C2 = T2.C2, 
	T1.C3 = T2.C3
WHERE condition

后续

如果你发现无法update join,试下双表update语句

update unit u,unit_fix uf
set u.price=uf.price,u.bid_unit=uf.bid_unit,u.fix_flag=2,u.business_status=uf.business_status
where u.unit_id=uf.unit_id;
MySQL 中,可以使用 `UPDATE` 语句来更新中的数据。当需要更新多个中的数据时,可以使用 `JOIN` 语句将这些关联起来。 下面是一个例子,演示如何使用 `UPDATE` 和 `JOIN` 语句来更新两个中的数据: ``` UPDATE table1 LEFT JOIN table2 ON table1.id = table2.id SET table1.column1 = 'new_value' WHERE table2.column2 = 'some_value'; ``` 在上面的例子中,我们使用了 `LEFT JOIN` 来关联 `table1` 和 `table2` ,并将它们的 `id` 列作为关联条件。然后使用 `SET` 语句来更新 `table1` 中的 `column1` 列。注意,这里使用的是 `table1.column1`,而不是 `table2.column1`,因为我们要更新的是 `table1` 中的数据。最后,使用 `WHERE` 语句来指定筛选条件,只有当 `table2` 中的 `column2` 列等于某个值时,才会执行更新操作。 需要注意的是,当使用 `LEFT JOIN` 进行多关联时,可能会出现某些行在2中不存在的情况。在这种情况下,`UPDATE` 语句仍然会更新 `table1` 中的数据,但是没有匹配的行将被设置为 `NULL` 值。如果不想更新这些行,可以添加一个 `WHERE` 条件来排除它们。 外,需要注意的是,MySQL 中的 `UPDATE` 语句是一个非常强大的操作,如果使用不当,可能会导致数据不一致或者数据丢失的问题。因此,在进行更新操作时,一定要谨慎操作,先进行备份,确保不会造成不可逆的后果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值