概述
MySQL
中当需要使用其它表的数据来更新数据时,多表联合查询的数据进行更新,可通过 update select
语句将select查询结果执行update。
UPDATE `table1` a
INNER JOIN `table2` b ON a.`field1` = b.`field1`
SET a.`field2` = b.`field2`
WHERE [条件];
示例
例如:有一个订单表 orders
和一个汇率表 rates
,根据订单表的货币类型 currency
及日期字段 created_at
查询货币当日汇率,并更新至订单表货币汇率字段 currency_rate
订单表 orders
id | currency | currency_rate | created_at |
---|---|---|---|
1 | USD | 0.00 | 2023-06-10 10:00:00 |
2 | EUR | 0.00 | 2023-06-12 10:00:00 |
汇率表 rates
id | code | rate | date |
---|---|---|---|
1 | USD | 7.12 | 2023-06-10 |
2 | EUR | 7.66 | 2023-06-10 |
3 | USD | 7.14 | 2023-06-12 |
4 | EUR | 7.67 | 2023-06-12 |
执行SQL
UPDATE `orders` o
INNER JOIN `rates` r ON r.`code` = o.`currency`
SET o.`currency_rate` = r.`rate`
WHERE DATE_FORMAT(o.`created_at`, '%Y-%m-%d') = r.`date`
更新后订单表 orders
id | currency | currency_rate | created_at |
---|---|---|---|
1 | USD | 7.12 | 2023-06-10 10:00:00 |
2 | EUR | 7.67 | 2023-06-12 10:00:00 |
说明
上面的 INNER JOIN
,也可以是 LEFT JOIN
、 RIGHT JOIN
等联合查询