MySQL 5.7 根据关联表更新当前表
之前不知道还有可以这么操作的 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 提示里面也是这么写的:
百思不得其解。难道是没有更新 MySQL 版本的问题,新版本 8.0 可能支持这种写法?但 join 的另一种写法怎么解释能成功呢?
搞到最后才搞明白,原来是 join 的位置错了,应该在 set 前面才对:
update table2
join table1 on table2.id = table1.id
set table2.column2 = table1.column1
所以嘛,尽信百度,不如没有百度。