SQL UPDATE关联INNER JOIN失效:SELECT查询正常但更新操作无法执行
问题原因
你原有UPDATE语句的问题是UPDATE子句指定了rbhl_nodelist作为更新表,但后续SET语句用了别名nl,同时不同数据库的UPDATE关联语法存在差异,所以执行失败。
解决方案
通用兼容写法(支持所有主流SQL数据库)
这种写法不依赖数据库特有的UPDATE JOIN语法,兼容性最强:
UPDATE rbhl_nodelist SET r = r - 3 WHERE id IN ( SELECT node1 AS nid FROM rbhl_linkednodes WHERE id = 1 UNION ALL SELECT node2 AS nid FROM rbhl_linkednodes WHERE id = 1 );
MySQL 专属写法
UPDATE rbhl_nodelist nl INNER JOIN rbhl_linkednodes ln ON ln.node1 = nl.id OR ln.node2 = nl.id SET nl.r = nl.r - 3 WHERE ln.id = 1;
PostgreSQL/SQL Server 专属写法
UPDATE rbhl_nodelist nl SET r = nl.r - 3 FROM rbhl_linkednodes ln WHERE ln.id = 1 AND (ln.node1 = nl.id OR ln.node2 = nl.id);
以上语句执行后,rbhl_nodelist表中id为6、7的两条记录r值会从15更新为12,满足你同时修改两个符合条件记录的需求。
内容的提问来源于stack exchange,提问作者Mit Patel
相关产品推荐
相关产品推荐

