MySQL 从一张表update字段到另外一张表中

本文介绍了MySQL中如何高效地更新多个表的相关记录,包括通过连接更新单列或多列,使用子查询更新数据,以及对比了使用子查询和连接操作的不同效率。
使用MySQL 4.0版或更高更新您可以通过加入两个或多个表一起一表;通过加入两个表连同您可以更新一个表的记录在相关领域的总部设在另一个表。

先来几个简单的示例

Solution 1:  1列

?
1
2
3
update student s, city c
   set s.city_name = c. name
  where s.city_code = c.code;

Solution 2:  多个列

?
1
2
3
4
update a, b
 
set a.title=b.title, a. name =b. name
where a.id=b.id

Solution 3: 子查询

?
1
update student s set city_name = ( select name from city where code = s.city_code);

我们再来看几个负责写的

例如: 把表 tk_zyt_scenery_order的 字段更新到 t_advs_order中去, 一般可能会这样写:

?
1
2
3
4
5
6
7
UPDATE t_advs_order SET
  
  attribute1=( SELECT o.order_state FROM tk_zyt_scenery_order o WHERE o.order_id=` on `),
  
  attribute2=( SELECT o.order_state FROM tk_zyt_scenery_order o WHERE o.order_id=` on `)
  
  WHERE EXISTS ( SELECT o.order_state FROM tk_zyt_scenery_order o WHERE o.order_id=` on `);

这样效率比较低下, 优化写法:

?
1
2
3
4
5
UPDATE t_advs_order a INNER JOIN tk_zyt_scenery_order s ON s.order_id=a.` on ` SET
  
  a.attribute1=s.order_id,
  
  a.attribute2=s.order_id;

MySQL 中,可以通过 `UPDATE` 语句结合 `JOIN` 子句将一张字段值更新到一张中。这种操作通常用于根据关联条件将一张的数据同步到一张。 ### 基本语法 MySQL 的 `UPDATE` 语法结合 `JOIN` 可以实现跨更新。以下是基本语法格式: ```sql UPDATE target_table JOIN source_table ON target_table.join_column = source_table.join_column SET target_table.update_column = source_table.source_column; ``` - `target_table` 是目标,即需要被更新的。 - `source_table` 是源,即提供新数据的。 - `join_column` 是两张之间用于匹配的字段。 - `update_column` 是目标中需要更新的字段。 - `source_column` 是源中提供新值的字段。 ### 示例 假设有两张:`employees` 和 `departments`。`employees` 中有一个字段 `department_id`,而 `departments` 中包含 `id` 和 `department_name` 字段。如果需要将 `departments` 中的 `department_name` 更新到 `employees` 中对应的 `department_name` 字段,可以使用以下 SQL 语句: ```sql UPDATE employees JOIN departments ON employees.department_id = departments.id SET employees.department_name = departments.department_name; ``` 这条语句会根据 `department_id` 和 `id` 的匹配关系,将 `departments` 中的 `department_name` 更新到 `employees` 中。 ### 注意事项 1. **索引优化**:确保用于 `JOIN` 的字段(如 `department_id` 和 `id`)有索引,这样可以提高更新效率。 2. **WHERE 条件**:如果只想更新特定记录,可以在语句中添加 `WHERE` 子句,例如: ```sql UPDATE employees JOIN departments ON employees.department_id = departments.id SET employees.department_name = departments.department_name WHERE departments.department_name = 'Sales'; ``` 3. **数据一致性**:在更新前,建议备份数据,避免因错误操作导致数据丢失或不一致。 ### 扩展功能 如果需要更新多个字段,可以在 `SET` 子句中添加多个赋值语句,例如: ```sql UPDATE employees JOIN departments ON employees.department_id = departments.id SET employees.department_name = departments.department_name, employees.manager_id = departments.manager_id; ``` 通过这种方式,可以同时更新 `employees` 中的多个字段。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值