MySQL联表UPDATE语句报错求助,对应SELECT语句可正常执行
解决MySQL UPDATE JOIN的语法错误问题
嘿,这个问题我太熟了——你写的UPDATE语句是SQL Server/PostgreSQL风格的语法,但MySQL并不支持UPDATE ... FROM ... JOIN这种格式,这就是报错的根源!
为什么SELECT能正常运行?
因为SELECT的JOIN语法在大多数关系型数据库里是通用的,所以你的查询语句没问题;但UPDATE的语法在不同数据库里差异很大,MySQL有自己的写法规范。
正确的MySQL UPDATE JOIN写法
你需要把JOIN子句直接跟在UPDATE之后,再写SET操作,具体如下:
UPDATE POSTS AS P INNER JOIN AUTHORS AS A ON P.author_id = A.id SET P.author_name = A.name;
另一种可选写法(子查询方式)
如果更习惯用子查询,也可以这样写(不过JOIN的性能通常更好):
UPDATE POSTS SET author_name = ( SELECT name FROM AUTHORS WHERE AUTHORS.id = POSTS.author_id ) WHERE EXISTS ( SELECT 1 FROM AUTHORS WHERE AUTHORS.id = POSTS.author_id );
这里的WHERE EXISTS是为了避免把没有对应作者的post的author_name设为NULL。
关键差异总结
- 错误写法(SQL Server风格):
UPDATE 表 SET ... FROM 表 JOIN ... - 正确写法(MySQL风格):
UPDATE 表 JOIN ... ON ... SET ...
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

