MySQL中UPDATE JOIN

在MySQL数据库中,UPDATE语句用于修改表中现有的记录。有时,我们需要根据另一个相关联表中的条件来更新表中的数据。这时就需要使用UPDATE JOIN语句。最近我们遇到了这样的需求:我们有一张历史记录表,其中一个字段记录了用,连接的多个用户账号。现在,我们添加了一列,需要将这些账号翻译为用户名。为了处理历史数据,我们使用了update join语句。

什么是UPDATE JOIN?

UPDATE JOIN语句允许我们使用一个表的数据来更新另一个相关联的表的数据。它结合了UPDATE和JOIN两个关键字,使得我们可以根据相关联表的条件来更新目标表的数据。

语法

UPDATE JOIN语句的基本语法如下

1
2
3
4
UPDATE table1 T1
JOIN table2 T2 ON T1.column1  = T2.column2
SET T1.column2 =  T2.column3
WHERE T1.column1 is not null ;

示例

比如我们有一张用户user表,有一张bussness表,以前我们只记录了创建人,现在我们需要将创建人的姓名也加上,我们可以使用以下sql来更新:

1
2
3
update bussness T1
join user T2 on T1.creat_user = T2.account
set T1.creat_username=T2.username

案例

我们一张记录表,其中有个字段是保存的是用,连接的多个用户账号,现在需要把这些账号展示为用户姓名,于是为提升性能,我们是直接在这种表中增加了一个字段来保存这些账号对应的姓名,这时需要对历史数据进行处理,处理sql如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
UPDATE bus_history T1,
(
  SELECT
   T2.id,
   T2.user_accounts,
   GROUP_CONCAT( T4.user_name ) AS user_names
  FROM
   bus_history T2
   JOIN mysql.help_topic T3 ON T3.help_topic_id < ( LENGTH( T1.user_accounts ) - LENGTH( REPLACE ( T1.user_accounts, ',' , '' )) + 1 )
   LEFT JOIN sys_user T4 ON T4.account = SUBSTRING_INDEX( SUBSTRING_INDEX( T1.user_accounts, ',' , T3.help_topic_id + 1 ), ',' ,- 1 )
  GROUP BY
   T1.id
  ) T5
  SET T1.user_names = T5.user_names
WHERE
  T1.id = T5.id

在这sql,我们使用了一个临时表来和bus_history 表通过update join 来完成了更新

注意事项

在使用UPDATE JOIN语句时,需要注意以下几点:

  • 确保连接条件是准确的:连接条件决定了哪些行将被更新。如果连接条件不正确,可能会导致意外的结果或者不完整的更新。
  • 谨慎使用WHERE子句:WHERE子句用于过滤要更新的行。确保WHERE子句的条件是准确的,否则可能会影响到不应该更新的行。
  • 测试更新操作:在执行UPDATE JOIN语句之前,最好先在测试环境中进行测试,确保更新操作不会对数据产生不良影响。

总结

在本文中,我们深入探讨了MySQL中UPDATE JOIN语句的概念、语法和示例用法。通过UPDATE JOIN,我们可以根据相关联的表来更新目标表中的数据,从而实现更加灵活和高效的数据更新操作。但是在使用UPDATE JOIN时需要谨慎,确保连接条件和WHERE子句的准确性,以避免意外的结果。希望本文能够帮助你更好地理解和应用UPDATE JOIN语句。

示例:

UPDATE pos_sales_order_detail t1,
(
SELECT t1.id,t1.order_no,t1.item_id,t2.supplier_id
FROM pos_sales_order_detail AS t1
LEFT JOIN item AS t2 ON t1.item_id=t2.id
) T5
SET t1.supplier_id = T5.supplier_id
WHERE
T1.id = T5.id;

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhiping35

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值