首页 > 数据库 >MySQL中UPDATE JOIN

MySQL中UPDATE JOIN

时间:2024-05-27 17:12:52浏览次数:25  
标签:JOIN T2 UPDATE T1 user MySQL id

在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;

 

标签:JOIN,T2,UPDATE,T1,user,MySQL,id
From: https://www.cnblogs.com/zhangzhiping35/p/18215992

相关文章

  • MySQL - [03] 数据库引擎
    所有的数据库文件都存在data目录下,本质还是文件的存储。  --建表时指定编码格式为中文utf-8CREATETABLEIFNOTEXISTS`student`( `id`INT(4)NOTNULLAUTO_INCREMENTCOMMENT'学号', `name`VARCHAR(30)NOTNULLDEFAULT'匿名'COMMENT'姓名', `pwd`VARCHA......
  • 部署经典黄金架构LAMP----编译安装MySQL----2
    版本要求:mysql-5.6.49安装目录:/usr/local/msyql数据目录:/usr/local/msyql/data端口:33061、检查是否安装了mariadb(如果有会返回,给它卸载了) [root@localhostlocal]#rpm-qa|grep-imariadbmariadb-libs-5.5.65-1.el7.x86_64[root@localhostlocal]#rpm-qa|grep-im......
  • mysql常用命令
    连接mysqlmysql-ualgorithm-hxxx-P11234-pxxx添加索引altertablewiki_update_infoaddindexidx_url(url);查看阻塞进程select*frominformation_schema.innodb_trx;常用语句selectt1.post_uuid,t1.urlfromwiki_analysis_infoast1fulljoinwiki_link_info......
  • Mysql初始
    存储数据的演变过程基于内存保存:字典,列表基于硬盘本地保存文本文件文件夹json模块保存基于网络保存TCP服务端数据库就是一个基于网络通信保存数据的应用程序数据库类型关系型数据库:通过关系模型组织数据,支持sql查询MySQL,postgresqlOraclesqlserver特......
  • MySQL语句基础
    SQL规范关键字不区分大小写用;结尾SQL注释单行注释--注释-注释多行注释/*注释*/SQL类型数据定义语言(DDL:Datadefinitionlanguage)1.操作(DML:datamanuplatelanguage)1.控制(DCL:datacontrollanguage)1.SQL常用命令helpstatusexitquit\c......
  • windows下mysql修改表名大消息参数lower_case_table_names,需要initialize才生效
    第一步:尝试修改文件my.ini,发现改了重启不管用:C:\ProgramFiles\MySQL\MySQLServer8.0\bin>notepadmy.ini[mysqld]lower_case_table_names=2 第二步:尝试初始化mysql服务,带上参数。注意,会清空数据库,所以务必先备份数据!!!参考:https://blog.csdn.net/cccgo68/article/d......
  • 1915springboot VUE 宠物寄养平台系统开发mysql数据库web结构java编程计算机网页源码m
    一、源码特点 springbootVUE宠物寄养平台系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。springbootVUE宠物寄养......
  • MySQL数据库知识点快速回忆【五分钟过一遍】
    前言为找实习做准备,跟网课学习中,差不多一周时间把MySQL部分看完(2024.5.15-2024.5.24),手敲知识点,坐地铁的时候几分钟过一遍,分享给大家。一、SQL1.1SQL简介SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。1.2通用语法SQL语句可以单行或多行......
  • k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、实验环境二、具体步骤1.准备存储设备:这里使用的是NFS2.现在部署一个MySQL服务,并且将MySQL的数据进行持久化存储。(1)创建PV,PVC(2)部署MySQL(3)在MySQL数据库中添加数据(4)模拟MySQ服务器节点故障......
  • MySQL8.0针对某个IP添加访问权限
    #先进入mysqlmysql-uroot-p#输入对应的密码后进入#切换数据库为mysqlusemysql;#查看现有用户信息;selectuser,hostfromuser;#如果Host有对应的IP,可以通过以下语句查询授权信息,username和host为上面对应的user,host,如果要对所有IP放开限制将host写成%即可show......