SQL Server中如何通过跨表SELECT实现UPDATE同步聊天ID?
解决MariaDB中跨表UPDATE的语法错误问题
你的问题源于SQL Server与MariaDB的跨表更新语法不兼容,SQL Server支持的UPDATE ... FROM ... JOIN扩展写法,在MariaDB中不被支持,因此触发了语法错误。
原代码问题分析
原代码的WHERE条件和JOIN的ON条件完全重复,属于冗余代码;同时MariaDB不认可SQL Server这种通过FROM引入关联表的更新语法,这是报错的核心原因。
适配MariaDB的正确代码
UPDATE ac_messages AS Table_A INNER JOIN ac_contacts AS Table_B ON (Table_A.m_to = Table_B.users_id AND Table_A.m_from = Table_B.contacts_id) OR (Table_A.m_from = Table_B.users_id AND Table_A.m_to = Table_B.contacts_id) SET Table_A.chat_id = Table_B.chat_id
关键改动说明
- 调整语法结构:将
UPDATE目标表与JOIN语句直接关联,去掉SQL Server特有的FROM子句 - 删除冗余条件:
JOIN的ON已经完成了匹配筛选,无需重复写WHERE条件 - 保留原有业务逻辑:别名、双向用户匹配的关联规则完全保留,确保同步逻辑不变
内容的提问来源于stack exchange,提问作者it acc
相关产品推荐
相关产品推荐

