如何在单条SQL查询中从多表更新一列?附失败尝试示例
多表关联更新单字段的解决方案
先看你原SQL里的明显问题:
- 字段名大概率存在笔误:
ords_stas_id应该是orders表的order_status_id;s.stas_enable应该是status表的status_enable,这类拼写错误会直接导致语句执行失败 - 不同数据库的多表更新语法存在差异,下面按主流数据库给出正确写法:
MySQL/MariaDB 场景
你的写法框架是对的,修正字段名后即可运行:
UPDATE orders o INNER JOIN status s ON o.order_status_id = s.status_id SET o.order_status_id = '23' WHERE o.location = 'DRS' AND s.status_enable = '0';
PostgreSQL 场景
PostgreSQL不支持直接在UPDATE里写JOIN,改用FROM子句关联表:
UPDATE orders o SET order_status_id = '23' FROM status s WHERE o.order_status_id = s.status_id AND o.location = 'DRS' AND s.status_enable = '0';
SQL Server 场景
SQL Server需要通过FROM子句关联表,更新时指定目标表别名即可:
UPDATE o SET o.order_status_id = '23' FROM orders o INNER JOIN status s ON o.order_status_id = s.status_id WHERE o.location = 'DRS' AND s.status_enable = '0';
重要提醒
- 如果
order_status_id是数值类型,不要给23加单引号,直接写23 - 执行更新前一定要先跑查询验证目标记录,避免误更新:
-- 以MySQL为例,验证要更新的记录范围 SELECT o.* FROM orders o INNER JOIN status s ON o.order_status_id = s.status_id WHERE o.location = 'DRS' AND s.status_enable = '0';
内容的提问来源于stack exchange,提问作者Haruya
相关产品推荐
相关产品推荐

