编写带JOIN操作的UPDATE语句时FROM子句报语法错误
错误原因
- 语法不兼容:
UPDATE ... FROM是SQL Server、PostgreSQL支持的多表更新语法,MySQL不支持该结构,如果在MySQL环境执行,会直接在FROM子句位置抛出语法错误。 - 表声明逻辑冲突:即使在支持
UPDATE ... FROM语法的数据库中运行,原语句也存在问题:要更新的目标表tbl_salesactivity_new(别名sn)没有在UPDATE关联的数据源中正确声明,反而在后续JOIN中重复关联目标表,会触发别名未定义、关联逻辑冲突的报错。 - 额外注意:如果
ar.ardelay字段是数值类型,过滤条件里不要给0加单引号,避免隐式类型转换导致索引失效、匹配结果异常;如果是字符类型,保留'0'的写法即可。
正确写法
根据使用的数据库选择对应语法:
MySQL 环境
MySQL多表更新不需要额外加FROM子句,直接在UPDATE后罗列关联表,再写关联条件、更新逻辑即可:
UPDATE tbl_salesactivity_new sn INNER JOIN arh ar ON sn.shipment = ar.shipment_id SET sn.delay = 'Yes' WHERE ar.ardelay > 0;
SQL Server / PostgreSQL 环境
这类数据库支持UPDATE ... FROM语法,目标表在UPDATE后声明,FROM子句中写关联的其他表即可,不要重复关联目标表:
UPDATE sn SET sn.delay = 'Yes' FROM tbl_salesactivity_new sn INNER JOIN arh ar ON sn.shipment = ar.shipment_id WHERE ar.ardelay > 0;
内容的提问来源于stack exchange,提问作者user3465081
相关产品推荐
相关产品推荐

