之前不知道还有可以这么操作的 SQL,都是先取出数据再遍历循环更新。百度了一下,大概的几种方式记录一下。

mysql根据一个表的数据更新另一个表数据的SQL写法

方法一:使用 JOIN 语句(后面测试执行报错 Syntax Error)

update table2 set table2.column2 = table1.column1
join table1 on table2.id = table1.id

方法二:使用子查询

update table2
set column2 = (
    select column1
    from table1
    where table2.id = table2.id
)

其他方法:使用 MERGE 语句、使用临时表,都不在第一考虑范围。

使用 JOIN 语句报错:JOIN 位置存在符号错误

测试很多次,诸如讲 join 改成 inner join(作用上两者应该是一样的)测试没有结果。

想到之前遇到过的 JOIN 关联的另一种写法:

update table1,table2
set table2.column2 = table1.column1
where table2.id = table1.id

执行成功。这表示 JOIN 是没有问题的呀!

百度 AI 提示里面也是这么写的:

sql 根据关联表的内容更新当前表 - 百度AI结果

百思不得其解。难道是没有更新 MySQL 版本的问题,新版本 8.0 可能支持这种写法?但 join 的另一种写法怎么解释能成功呢?

搞到最后才搞明白,原来是 join 的位置错了,应该在 set 前面才对:

update table2 
join table1 on table2.id = table1.id
set table2.column2 = table1.column1

所以嘛,尽信百度,不如没有百度